Spring-boot參考(三) 配置
debug
開啟debug開關可以檢視更多的資訊
java -jar myproject-0.0.1-SNAPSHOT.jar –debug
或者
在application.yml 中
debug: true
banner
banner.txt在classpath下增加這個檔案,可以替換掉啟動Spring的 圖案。
配置檔案就是 環境變數。
在程式啟動時 執行一些方法
實現 ApplicationRunner or CommandLineRunner 介面。
@Component
public class MyBean2 implements ApplicationRunner {
@Override
public void run(ApplicationArguments args) throws Exception {
System.out.println(args);
}
}
or
@Component
public class MyBean implements CommandLineRunner {
public void run(String... args) {
// Do something...
System.out.println("hello");
System.out.println(args);
}
}
修改程式退出的 返回值
@SpringBootApplication
public class ExitCodeApplication {
@Bean
public ExitCodeGenerator exitCodeGenerator() {
return () -> 42;
}
public static void main(String[] args) {
System.exit(SpringApplication
.exit(SpringApplication.run(ExitCodeApplication.class, args)));
}
}
Spring boot 配置引數的 載入順序
- Devtools global settings properties on your home directory
(~/.spring-boot-devtools.properties when devtools is active). @TestPropertySource annotations on your tests.
@SpringBootTest#properties annotation attribute on your tests.
Command line arguments.
- Properties from SPRING_APPLICATION_JSON
(inline JSON embedded in an environment variable or system - ServletConfig init parameters.
- ServletContext init parameters.
- JNDI attributes from java:comp/env.
- Java System properties (System.getProperties()).
- OS environment variables.
- A RandomValuePropertySource that only has properties in random.*.
Profile-specific application properties outside of your packaged jar
(application-{profile}.properties and YAML variants).Profile-specific application properties packaged inside your jar
(application-{profile}.properties and YAML variants).- Application properties outside of your packaged jar (application.properties and YAML variants).
- Application properties packaged inside your jar
(application.properties and YAML variants). - @PropertySource
annotations on your @Configuration classes. - Default properties
(specified using SpringApplication.setDefaultProperties).
配置隨機值
my.secret=${random.value}
my.number=${random.int}
my.bignumber=${random.long}
my.uuid=${random.uuid}
my.number.less.than.ten=${random.int(10)}
my.number.in.range=${random.int[1024,65536]}
配置 SpringApplication
public static void main(String[] args) {
SpringApplication app = new SpringApplication(MySpringConfiguration.class);
app.setBannerMode(Banner.Mode.OFF);
app.run(args);
}
配置檔案
預設會從 application.properties 這個檔案中讀取配置
這個檔案放在
- A /config subdirectory of the current directory.
- The current directory
- A classpath /config package
- The classpath root
這幾個位置都可以。
型別安全的 配置 ConfigurationProperties
@Value(“${property}”) 可能會造成型別的不安全, 所以提供了
ConfigurationProperties
@ConfigurationProperties("foo")
public class FooProperties {
private boolean enabled;
private InetAddress remoteAddress;
private final Security security = new Security();
public boolean isEnabled() { ... }
public void setEnabled(boolean enabled) { ... }
public InetAddress getRemoteAddress() { ... }
public void setRemoteAddress(InetAddress remoteAddress) { ... }
public Security getSecurity() { ... }
public static class Security {
private String username;
private String password;
private List<String> roles = new ArrayList<>(Collections.singleton("USER"));
public String getUsername() { ... }
public void setUsername(String username) { ... }
public String getPassword() { ... }
public void setPassword(String password) { ... }
public List<String> getRoles() { ... }
public void setRoles(List<String> roles) { ... }
}
}
ConfigurationProperties 需要設定setter方法。
profile
spring.profiles.active=dev,hsqldb