出现的原因是因为运行spring boot项目时是会编译文件的,而你的properties文件没有编译进去。
解决办法是:选择项目右键--->properties-->java build path-->xxx/src/main/resources--->选择excluded编辑移除下面一栏的内容即可
注:java build path 就是你编译后的预览
注解的几种形式
@Value("normal")
private String normal; // 注入普通字符串
@Value("#{systemProperties['os.name']}")
private String systemPropertiesName; // 注入操作系统属性
@Value("#{ T(java.lang.Math).random() * 100.0 }")
private double randomNumber; //注入表达式结果
@Value("#{beanInject.another}")
private String fromAnotherBean; // 注入其他Bean属性:注入beanInject对象的属性another,类具体定义见下面
@Value("classpath:com/hry/spring/configinject/config.txt")
private Resource resourceFile; // 注入文件资源
@Value("http://www.baidu.com")
private Resource testUrl; // 注入URL资源
application.properties:
home.province=ZheJiang
home.city=WenLing
home.desc=dev\: I'm ? living in ${home.province} ${home.city}.
##Spring Boot 是通过 application.properties 文件中,设置 spring.profiles.active 属性,
##比如 ,配置了 dev ,则加载的是 application-dev.properties 设置prod 则加载的是 plication-prod.properties
import org.springframework.stereotype.Component;
/**
* @author
*通过 @ConfigurationProperties(prefix = "home”) 注解,
*将配置文件中以 home 前缀的属性值自动绑定到对应的字段中。同是用 @Component 作为 Bean 注入到 Spring 容器中。
*
*如果不是用 application.properties 文件,而是用 application.yml 的文件,对应配置如下:
*## 家乡属性
home:
province: 浙江省
city: 温岭松门
desc: 我家住在${home.province}的${home.city}
键值对冒号后面,必须空一格。
*注意这里,就有一个坑了:
application.properties 配置中文值的时候,读取出来的属性值会出现乱码问题。但是 application.yml 不会出现乱码问题。
原因是,Spring Boot 是以 iso-8859 的编码方式读取 application.properties 配置文件。
*@PropertySource("classpath:uploaddefine.properties"):定义了要读取的properties文件的位置
*/
@Component
@ConfigurationProperties(prefix = "home")
public class HomeProperties {
private String province;//省份
private String city;//城市
private String desc;//描述
public String getProvince() {
return province;
}
public void setProvince(String province) {
this.province = province;
}
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
@Override
public String toString() {
return "HomeProperties{" +
"province='" + this.province + '\'' +
", city='" + this.city + '\'' +
", desc='" + this.desc + '\'' +
'}';
}
}
HelloController .java
/**
* Spring Boot HelloWorld案例
* @RestController 的意思就是controller里面的方法都以json格式输出
*
*/
/*自动装配的语法要求:不允许在局部进行自动装配(即:只能写在method外class里)。
自动装配的动作都是在容器启动的时候,容器在读取配置文件和加载类的时候就需要进行装配了,如果将它放在方法内,它就成了局部的信息,
对外是不可见的,无法进行装配,必须是成员变量,这样在加载的时候容器才检测到需要装配的变量。*/
@Autowired//这个要用在方法外面,否则会报错
private HomeProperties homeProperties;
@RequestMapping("/nihaoa")
public String SayHello(){
return homeProperties.toString();
}
解决办法是:选择项目右键--->properties-->java build path-->xxx/src/main/resources--->选择excluded编辑移除下面一栏的内容即可
注:java build path 就是你编译后的预览
注解的几种形式
@Value("normal")
private String normal; // 注入普通字符串
@Value("#{systemProperties['os.name']}")
private String systemPropertiesName; // 注入操作系统属性
@Value("#{ T(java.lang.Math).random() * 100.0 }")
private double randomNumber; //注入表达式结果
@Value("#{beanInject.another}")
private String fromAnotherBean; // 注入其他Bean属性:注入beanInject对象的属性another,类具体定义见下面
@Value("classpath:com/hry/spring/configinject/config.txt")
private Resource resourceFile; // 注入文件资源
@Value("http://www.baidu.com")
private Resource testUrl; // 注入URL资源
application.properties:
home.province=ZheJiang
home.city=WenLing
home.desc=dev\: I'm ? living in ${home.province} ${home.city}.
##Spring Boot 是通过 application.properties 文件中,设置 spring.profiles.active 属性,
##比如 ,配置了 dev ,则加载的是 application-dev.properties 设置prod 则加载的是 plication-prod.properties
#spring.profiles.active=dev
HomeProperties .java
import org.springframework.stereotype.Component;
/**
* @author
*通过 @ConfigurationProperties(prefix = "home”) 注解,
*将配置文件中以 home 前缀的属性值自动绑定到对应的字段中。同是用 @Component 作为 Bean 注入到 Spring 容器中。
*
*如果不是用 application.properties 文件,而是用 application.yml 的文件,对应配置如下:
*## 家乡属性
home:
province: 浙江省
city: 温岭松门
desc: 我家住在${home.province}的${home.city}
键值对冒号后面,必须空一格。
*注意这里,就有一个坑了:
application.properties 配置中文值的时候,读取出来的属性值会出现乱码问题。但是 application.yml 不会出现乱码问题。
原因是,Spring Boot 是以 iso-8859 的编码方式读取 application.properties 配置文件。
*@PropertySource("classpath:uploaddefine.properties"):定义了要读取的properties文件的位置
*/
@Component
@ConfigurationProperties(prefix = "home")
public class HomeProperties {
private String province;//省份
private String city;//城市
private String desc;//描述
public String getProvince() {
return province;
}
public void setProvince(String province) {
this.province = province;
}
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
@Override
public String toString() {
return "HomeProperties{" +
"province='" + this.province + '\'' +
", city='" + this.city + '\'' +
", desc='" + this.desc + '\'' +
'}';
}
}
HelloController .java
/**
* Spring Boot HelloWorld案例
* @RestController 的意思就是controller里面的方法都以json格式输出
*
*/
@RestController
@RequestMapping("hello")
public class HelloController {/*自动装配的语法要求:不允许在局部进行自动装配(即:只能写在method外class里)。
自动装配的动作都是在容器启动的时候,容器在读取配置文件和加载类的时候就需要进行装配了,如果将它放在方法内,它就成了局部的信息,
对外是不可见的,无法进行装配,必须是成员变量,这样在加载的时候容器才检测到需要装配的变量。*/
@Autowired//这个要用在方法外面,否则会报错
private HomeProperties homeProperties;
@RequestMapping("/nihaoa")
public String SayHello(){
return homeProperties.toString();
}
}
访问的地址为:http://localhost:8080/hello/nihaoa