SpringBoot之(一)Spring Boot配置詳解
阿新 • • 發佈:2018-12-16
一、@Value賦值
當我們建立一個springboot專案的時候,系統預設會為我們在src/main/java/resources目錄下建立一個application.properties。個人習慣,我會將application.properties改為application.yml檔案,兩種檔案格式都支援。
在application.yml自定義一組屬性:
my:
name: forezp
age: 12
通過@Value("${屬性名}"):賦值給變數
@RestController public class MiyaController { @Value("${my.name}") private String name; @Value("${my.age}") private int age; @RequestMapping(value = "/miya") public String miya(){ return name+":"+age; } }
二、@ConfigurationProperties賦給Bean類
當我們有很多配置屬性的時候,這時我們會把這些屬性作為欄位來建立一個javabean,並將屬性值賦予給他們,比如:
my:
name: forezp
age: 12
number: ${random.int}
uuid : ${random.uuid}
max: ${random.int(10)}
value: ${random.value}
greeting: hi,i'm ${my.name}
其中配置檔案中用到了${random} ,它可以用來生成各種不同型別的隨機值。
怎麼講這些屬性賦於給一個javabean 呢,首先建立一個javabean
@ConfigurationProperties(prefix = "my")
@Component
public class ConfigBean {
private String name;
private int age;
private int number;
private String uuid;
private int max;
private String value;
private String greeting;
省略了getter setter...
需要加個註解@ConfigurationProperties,並加上它的prrfix。另外@Component可加可不加。另外spring-boot-configuration-processor依賴可加可不加
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
另外需要在應用類或者application類,加EnableConfigurationProperties註解。
@RestController
@EnableConfigurationProperties({ConfigBean.class})
public class LucyController {
@Autowired
ConfigBean configBean;
@RequestMapping(value = "/lucy")
public String miya(){
return configBean.getGreeting()+" >>>>"+configBean.getName()+" >>>>"+ configBean.getUuid()+" >>>>"+configBean.getMax();
}
我們還可以把@ConfigurationProperties還可以直接定義在@bean的註解上,這是bean實體類就不用@Component和@ConfigurationProperties了
@SpringBootApplication
public class DemoApplication{
//...
@Bean
@ConfigurationProperties(prefix = "connection")
public ConnectionSettings connectionSettings(){
return new ConnectionSettings();
}
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
然後我們需要使用的時候就直接這樣子注入
@RestController
@RequestMapping("/task")
public class TaskController {
@Autowired ConnectionSettings conn;
@RequestMapping(value = {"/",""})
public String hellTask(){
String userName = conn.getUsername();
return "hello task !!";
}
}
如果發現@ConfigurationPropertie不生效,有可能是專案的目錄結構問題,
你可以通過@EnableConfigurationProperties(ConnectionSettings.class)來明確指定需要用哪個實體類來裝載配置資訊
@Configuration
@EnableConfigurationProperties(ConnectionSettings.class)
public class MailConfiguration {
@Autowired private MailProperties mailProperties;
@Bean public JavaMailSender javaMailSender() {
// omitted for readability
}
}