带有@Bean注解的方法一般会同时初始化Bean并立即为它的属性设置值。
Spring获取属性源的方式有:
举个栗子:
想要把端口设置为8080
$ java -jar tacocloud.jar --server.port=8080
export SERVER_PORT=8080
spring:
datasource:
url: jdbc:postgresql://localhost:5432/spring-action-jpa
username: postgres
password: 123456
driver-class-name: org.postgresql.Driver
如果存在连接池,会自动使用配置的数据源
如果想让程序启动时执行数据库SQL,可以配置
spring.datasource.schema
和spring.datasourcce.data
属性
spring:
datasource:
schema:
- order-schema.sql
可以使用JDK的keytool命令行工具生成keystore
keytool -keystore mykeys.jks -genkey -alias tomcat -keyalg RSA
过程中出了密码,其余无关紧要,比如使用letmein作为密码,则在配置文件中使用如配置
server:
ssl:
key-store: mykeys.jks
key-store-password: letmain
key-password: letmain
默认情况下,SpringBoot通过Logback配置日志,日志会以INFO级别写入控制台。
可以加入logback的xml文件后,在配置文件中声明
以下是logback的内容(控制台和文件同时打印+JPA的SQL打印)
<configuration debug="false">
<!-- 应用名称 -->
<property name="APP_NAME" value="logTest" />
<!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径-->
<property name="LOG_HOME" value="${log.dir:-logs}/${APP_NAME}" />
<!-- 控制台输出 -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg %n</pattern>
</encoder>
</appender>
<!-- 按照每天生成日志文件 -->
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!--日志文件输出的文件名-->
<FileNamePattern>${LOG_HOME}/runtime.%d{yyyy-MM-dd}.%i.log</FileNamePattern>
<!-- each file should be at most 5MB, keep 30 days worth of history, but at most 100MB -->
<maxFileSize>5MB</maxFileSize>
<!--日志文件保留天数-->
<MaxHistory>30</MaxHistory>
<!--用来指定日志文件的上限大小,那么到了这个值,就会删除旧的日志-->
<totalSizeCap>100MB</totalSizeCap>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
</encoder>
</appender>
<!-- 1. 输出SQL 到控制台和文件-->
<logger name="org.hibernate.SQL" additivity="false" >
<level value="DEBUG" />
<appender-ref ref="FILE" />
<appender-ref ref="STDOUT" />
</logger>
<!-- 2. 输出SQL 的参数到控制台和文件-->
<logger name="org.hibernate.type.descriptor.sql.BasicBinder" additivity="false" level="TRACE" >
<level value="TRACE" />
<appender-ref ref="FILE" />
<appender-ref ref="STDOUT" />
</logger>
<root level="info">
<appender-ref ref="STDOUT" />
<appender-ref ref="FILE" />
</root>
</configuration>
Spring配置文件加入如下配置
spring:
# 打印SQL
show-sql: true
# 配置日志
logging:
config: classpath:logback.xml
如果只是简易版,可以直接在配置文件中配置
logging:
path: /var/logs/
file: TacoCloud.log
level:
root: WARN
将日志写入/var/logs/TacoCloud.log文件,默认日志文件达到10MB轮换。
需求:用户订单列表接口的分页大小,由配置文件给出
taco:
orders:
pageSize: 20
//@ConfigurationProperties(prefix = "taco.orders")
public class OrderController {
private int pageSize = 20;
public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}
一般,特定的配置细节会从控制器和其他应用程序中抽离出来@Component
@Data
@ConfigurationProperties(prefix = "taco.orders")
public class OrderProperties {
private int pageSize = 20;
}
其他类注入OrderProperties即可在IDEA等编辑器中,发现自定义的配置属性会被提示unknown property ‘taco‘
消除警告的方法就是创建自定义配置属性的元数据。在META-INF下创建一个名为additional-spring-configuration-metadata.json的文件
这个操作可以通过编辑器快捷操作完成。
{
"properties": [
{
"name": "taco.orders.pageSize",
"type": "java.lang.String",
"description": "Description for taco.orders.pageSize."
}
]
}
需求:应用部署到不同的环境上,通常配置的细节有不同。比如数据库、日志级别
可以使用SpringProfile。profile是一种条件化的配置,可以觉得运行时哪些profile处于激活状态。可以使用或忽略不同的bean、配置类和配置属性。
logging: # 没有配置profile属性代表通用
level:
tacos: DEBUG
--- # 通过三个中划线分割不同的profile
spring:
profile: prod # 代表这是prod环境
logging:
level:
tacos: WARN
spring:
profiles:
active:
- prod
但是这个可能是最糟糕的方式export SPRING_PROFILES_ACTIVE=prod
java jar -taco-cloud.jar --spring.profiles.active=prod
可以同时激活多个profile,配置文件可以另起一行,命令行用逗号分隔
可以通过@Profile注解将某些Bean设置到指定的profile。这是几种写法。
@Profile("dev")
@Profile({"dev", "qa"})
@Profile("!prod")
原文:https://www.cnblogs.com/AganRun/p/13195462.html