
接着上面的入门教程,我们来学习下Spring Boot的项目属性配置。
1、配置项目内置属性
属性配置主要是在application.properties文件里配置的(编写时有自动提示)这里我们将server的端口变为8888,路径加上HelloWorld:
在DeomApplication.java的页面时点击运行按钮,打开浏览器输入:http://localhost:8888/HelloWorld/hello
此时,控制台的输出信息也可以看到端口变成8888了:
之前的url已无效:
更改后的URL有效:
2、配置自定义属性
同样也是在application.properties文件编写,内容如下:
接着在HelloWorldController.java中使用@Value注解将自定义属性注入,这样可以直接使用自定义属性了:
运行项目,输入:http://localhost:8888/HelloWorld/hello,浏览器将显示如下结果:
3、ConfigurationProperties 配置
新建一个com.example.properties包,再新建一个MysqlProperties.java类,经测试运行会出错,无法找到该Bean,错误如下:
百度后找到了原因:
SpringBoot项目的Bean装配默认规则是根据Application类所在的包位置从上往下扫描!
io.github.gefangshuai.app
,则只会扫描io.github.gefangshuai.app
包及其所有子包,如果service或dao所在包不在io.github.gefangshuai.app
及其子包下,则不会被扫描!于是将MysqlProperties.java类移动了com.example.demo包下,也就是Application类所在的包,就没报bean找不到的错误了。
MysqlProperties.java用到了2个重要的注解:
1、@Component:把普通pojo实例化到spring容器中,相当于配置文件中的<bean id="" class=""/>
2、@ConfigurationProperties(prefix = "mysql"):将配置类注入到spring容器中,这样可以使用配置类,这里使用了前缀。
编写完成,IDEA会提示改属性有问题,原因是spring-boot-configuration-processor.jar包没有引入,在pom.xml加入如下依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
MysqlProperties.java代码如下(使用Alt+Insert快捷键生成Getter和Setter方法):
package com.example.demo; import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component; /**
* Mysql属性配置
*/
@Component
@ConfigurationProperties(prefix = "mysql")
public class MysqlProperties { private String jdbcName; private String dbUrl; private String userName; private String password; public String getJdbcName() {
return jdbcName;
} public void setJdbcName(String jdbcName) {
this.jdbcName = jdbcName;
} public String getDbUrl() {
return dbUrl;
} public void setDbUrl(String dbUrl) {
this.dbUrl = dbUrl;
} public String getUserName() {
return userName;
} public void setUserName(String userName) {
this.userName = userName;
} public String getPassword() {
return password;
} public void setPassword(String password) {
this.password = password;
}
}
application.properties添加的属性如下:
mysql.jdbcName=com.mysql.jdbc.Driver
mysql.dbUrl=jdbc:mysql://localhost:3306/db_boot
mysql.userName=root
mysql.password=root
HelloWordController.java的最终代码为:
package com.example.demo; import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody; import javax.annotation.Resource; /**
* Created on 2017-9-3.
*/
@Controller
public class HelloWorldController { @Value("${hellWorld}")
private String helloWorld; @Resource
private MysqlProperties mysqlPropertie; @RequestMapping("/hello")
@ResponseBody
public String say(){
return helloWorld;
} @RequestMapping("/showJdbc")
@ResponseBody
public String showJdbc(){
return "mysql.jdbcName" + mysqlPropertie.getJdbcName() +"<br/>"
+ "mysql.dbUrl" + mysqlPropertie.getDbUrl() +"<br/>"
+ "mysql.userName" + mysqlPropertie.getUserName() +"<br/>"
+ "mysql.password" + mysqlPropertie.getPassword() +"<br/>"; } }
运行项目,浏览器输入:http://localhost:8888/showJdbc,正确结果如下: