spring boot 自定义配置

spring boot 自定义配置_第1张图片
spring boot的原理就是根据conditiional的注解为我们自动化的初始化一些配置,省掉了开发人员的繁琐配置工作量。下面来说一下如何自定义的配置一些配置。

spring boot 自动配置原理

我们先看一段jdbsTemplate的自动化配置

@Bean
@ConditionalOnMissingBean(JdbcOperations.class)
public JdbcTemplate jdbcTemplate() {
return new JdbcTemplate(this.dataSource);
}

jdbcTemplate()方法上添加了@Bean注解,在需要时可以配置出一个JdbcTemplate
Bean。但它上面还加了@ConditionalOnMissingBean注解,要求当前不存在JdbcOperations
类型(JdbcTemplate实现了该接口)的Bean时才生效。如果当前已经有一个JdbcOperations
Bean了,条件即不满足,不会执行jdbcTemplate()方法

Spring Boot的设计是加载应用级配置,随
后再考虑自动配置类。因此,如果你已经配置了一个JdbcTemplate Bean,那么在执行自动配置
时就已经存在一个JdbcOperations类型的Bean了,于是忽略自动配置的JdbcTemplate Bean

通过属性文件外置配置

Spring Boot应用程序有多种设置途径。Spring Boot能从多种属性源获得属性,包括
如下几处
(1) 命令行参数
(2) java:comp/env里的JNDI属性
(3) JVM系统属性
(4) 操作系统环境变量
(5) 随机生成的带random.*前缀的属性(在设置其他属性时,可以引用它们,比如${random.
long})
(6) 应用程序以外的application.properties或者appliaction.yml文件
(7) 打包在应用程序内的application.properties或者appliaction.yml文件
(8) 通过@PropertySource标注的属性源
(9) 默认属性
这个列表按照优先级排序,也就是说,任何在高优先级属性源里设置的属性都会覆盖低优先
级的相同属性。例如,命令行参数会覆盖其他属性源里的属性。
application.properties和application.yml文件能放在以下四个位置。
(1) 外置,在相对于应用程序运行目录的/config子目录里。
(2) 外置,在应用程序运行的目录里。
(3) 内置,在config包内。
(4) 内置,在Classpath根目录。

同样,这个列表按照优先级排序。也就是说,/config子目录里的application.properties会覆盖
应用程序Classpath里的application.properties中的相同属性。
此外,如果你在同一优先级位置同时有application.properties和application.yml,那么application.
yml里的属性会覆盖application.properties里的属性

禁用模板缓存

spring:
  thymeleaf:
    cache: false

配置嵌入式HTTPS服务

用JDK的keytool工具来创建一个密钥存储(keystore)

$ keytool -keystore mykeys.jks -genkey -alias tomcat -keyalg RSA

application.yml 配置

server:
  port: 8443
  ssl:
    key-store: file:///path/to/mykeys.jks
    key-store-password: letmein
    key-password: letmein

配置日志

默认情况下,Spring Boot会用Logback(http://logback.qos.ch)来记录日志,并用INFO级别输出到控制台。
logback.xml 简单样例

<configuration>
  <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
      <pattern>
      %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
      pattern>
    encoder>
  appender>
  <logger name="root" level="INFO"/>
  <root level="INFO">
    <appender-ref ref="STDOUT" />
  root>
configuration>

日志yml配置

logging:
  path: /Users/bijia/logs/
  file: test.log
  level:
    root: DEBUG
    org:
      springframework:
        security: DEBUG

配置数据源

spring:
datasource:
url: jdbc:mysql://localhost/readinglist
username: dbuser
password: dbpass
driver-class-name: com.mysql.jdbc.Driver

也可以设置spring.datasource.jndi-name属性,从JNDI里查找DataSource:

spring:
  datasource:
    jndi-name: java:/comp/env/jdbc/readingListDS

应用程序Bean 的配置外置

将bean的属性配置在yml里面

amazon:
  associateId: habuma-20
@Component
@ConfigurationProperties("amazon")
public class AmazonProperties {
private String associateId;
public void setAssociateId(String associateId) {
this.associateId = associateId;
}
public String getAssociateId() {
return associateId;
}
}

使用Profile 进行配置

@Profile("production")
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
...
}

这里用的@Profile注解要求运行时激活production Profile,这样才能应用该配置。如果
production Profile没有激活,就会忽略该配置,而此时缺少其他用于覆盖的安全配置,于是应
用自动配置的安全配

logging:
  level:
    root: INFO

---
spring:
  profiles: development
  
logging:
  level:
  root: DEBUG

---
spring:
  profiles: production
logging:
  path: /tmp/
  file: BookWorm.log
level:
  root: WARN

这个application.yml文件分为三个部分,使用一组三个连字符(—)作为分隔符。
第二段和第三段分别为spring.profiles指定了一个值,这个值表示该部分配置应该应用在哪
个Profile 里。第二段中定义的属性应用于开发环境, 因为spring.profiles 设置为
development。与之类似,最后一段的spring.profile设置为production,在production
Profile被激活时生效。
另一方面,第一段并未指定spring.profiles,因此这里的属性对全部Profile都生效,或
者对那些未设置该属性的激活Profile生效

定制应用程序错误页面

Spring Boot自动配置的默认错误处理器会查找名为error的视图,如果找不到就用默认的白标错误视图

 如果配置了Thymeleaf,则有名为error.html的Thymeleaf模板。
 如果配置了FreeMarker,则有名为error.ftl的FreeMarker模板。
 如果配置了Velocity,则有名为error.vm的Velocity模板。
 如果是用JSP视图,则有名为error.jsp的JSP模板。

你可能感兴趣的:(springboot)