一、应用日志和Spring—boot—starter—logging
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</dependency>
在maven中添加了如上依赖,在SpringBoot启动时,应用将自动使用logback作为应用日志框架。如果需要进行配置调整,可以使用如下方法:
1)遵循logback约定,在classpath中使用自己定制的logback.xml配置文件,然后通过logging.config配置项指向这个配置文件来启用它,比如在application.properties中指定如下配置:logging.config=/{some.path.you.defined}/any-logfile-name-I-like.log
如果你更习惯使用log4j或者log4j2,那么在maven中添加相应的依赖模块即可。
二、快速web应用开发与Spring—boot—starter—web
1.项目结构层面的约定
项目结构层面与传统打war包的javaweb应用相比差异主要是:静态文件和页面模板的存放位置发生了变化。原来放在src/main/webapp目录下的一系列资源,现在都统一放在src/main/resource目录下:
①:src/main/resource/static用于存放各种静态资源,如css,js等
②:src/main/resource/templates用于存放模板文件,比如*.vm
2.SpringMvc框架层面的约定和定制
spring-boot-starter-web默认配置如下一些SpringMVC必要的组件:
①:必要的ViewResolver(视图解析器),比如ContentNegotiatingViewResolver和BeanNameViewResolver。
②:将必要的Converter、GenericConverter和Formatter等bean注册到IOC容器中。
③:添加一系列的HttpMessageConverter以便支持对web请求和相应的类型转换。
④:自动配置和注册MessageCodesResover。
3.嵌入式web容器层面的约定和定制
spring-boot-starter-web默认使用嵌入式tomcat作为web容器对外提供HTTP服务,默认将使用8080端口对外监听和提供服务
1)如果不想使用默认的嵌入式Tomcat,那么可以选择引入spring-boot-starter-jetty或者spring-boot-starter-undertow替代。
2)如果不想使用默认的8080端口,可以通过配置项server.port使用自己指定的端口:server.port=9090
spring-boot-starter-web提供了很多以server.为前缀的配置项用于对嵌入式web容器提供配置,例如:
server.port
server.address
server.ssl.*
server.tomcat.*
如果以上还无法满足你的需求,可以选择自己定义一个嵌入式web容器。
三、数据访问与Spring—boot—starter—jdbc
如果我们没有配置DataSource,SpringBoot会为我们自动配置一个基于嵌入式数据库的DataSource,这种自动配置适合用于测试场景,对开发帮助不大。我们可以使用DataSource自动配置模块提供的配置参数进行配置。
除了自动配置DataSource外,SpringBoot还会为我们自动配置JdbcTemplate、DataSourceTransactionmanager等关联设施。
如果配置多个数据源,就需要关掉SpringBoot默认提供的DataSource相关的自动配置。
四、Spring—boot—starter—aop及其使用场景说明
Spring—boot—starter—aop的自动配置行为由两部分内容组成:
1)位于spring-boot-autoconfigure的org.springframework.boot.autoconfiure.aop.AopAutoConfiguration提供@Configuration配置类和相应的配置项
2)Spring—boot—starter—aop模块自身提供了针对spring-aop ,aspectjrt和aspectjweaver的依赖.
AopAutoConfiguration为我们提供了两个配置项,用来有限干预Aop相关配置:
①spring.aop.auto=false 关闭aop自动配置
②spring..aop.proxy-target-class=false 启用针对class而不是interface级别的aop代理