主要有几点:

一、导入依赖

springboot的包和:

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>

版本在父类里统一管理了

<optional>true</optional>
</dependency>

一、配置自定义属性文件

  1. rabbit.config.host=192.168.135.129
  2. rabbit.config.port=5672
  3. rabbit.config.userName=guest
  4. rabbit.config.password=guest

二、在属性bean上的注解后期版本1.4以后主要是如下三个,且不需要在启动类上添加额外注解

@Component
@ConfigurationProperties(prefix="rabbit.config")
@PropertySource(value="classpath:config/rabbitmq.properties",encoding="utf-8")

也不需要在项目启动类上增加@EnableConfigurationProperties这个注解。

当然在打包的时候也要将该属性文件包含进来记得在pom文件的

<resources>
<resource>下面添加包含进自定义的文件,否则找不到文件报错。

项目启动类代码:

  1. package com.sharp.forward;
  2.  
  3. import org.mybatis.spring.annotation.MapperScan;
  4. import org.slf4j.Logger;
  5. import org.slf4j.LoggerFactory;
  6. import org.springframework.boot.CommandLineRunner;
  7. import org.springframework.boot.SpringApplication;
  8. import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
  9. import org.springframework.boot.autoconfigure.SpringBootApplication;
  10.  
  11. import com.sharp.forward.config.RabbitMQProperties;
  12.  
  13. @SpringBootApplication
  14. //@ImportResource("classpath:config/application-user-service-dubbo.xml")
  15. @MapperScan(basePackages= {"com.sharp.forward.mapper"})
  16. @EnableAutoConfiguration
  17. public class Application implements CommandLineRunner{
  18.  
  19. private static final Logger log = LoggerFactory.getLogger(Application.class);
  20. public static void main(String[] args) {
  21. SpringApplication.run(Application.class, args);
  22. }
  23.  
  24. /**
  25. * @param args
  26. * @throws Exception
  27. */
  28. @Override
  29. public void run(String... args) throws Exception {
  30. String config = "host: " + RabbitMQProperties.getHost()
  31. + ", config.port:" + RabbitMQProperties.getPort()
  32. + ", config.userName:" + RabbitMQProperties.getUserName();
  33.  
  34. log.info("SpringBoot2.0实现自定义properties配置文件与JavaBean映射:" + config);
  35.  
  36. }
  37.  
  38. }

启动项目后打印如下:

INFO com.sharp.forward.Application - SpringBoot2.0实现自定义properties配置文件与JavaBean映射:host: null, config.port:0, config.userName:null

说明没有注入进来,然后在看我的属性bean类

  1. /**
  2. *
  3. */
  4. package com.sharp.forward.config;
  5.  
  6. import org.springframework.boot.context.properties.ConfigurationProperties;
  7. import org.springframework.context.annotation.Configuration;
  8. import org.springframework.context.annotation.PropertySource;
  9. import org.springframework.stereotype.Component;
  10.  
  11. /**
  12. * @author 醉逍遥
  13. *
  14. */
  15. @Component
  16. @ConfigurationProperties(prefix="rabbit.config")
  17. @PropertySource(value="classpath:config/rabbitmq.properties",encoding="utf-8")
  18. public class RabbitMQProperties {
  19.  
  20. private static String host;
  21.  
  22. private static int port;
  23.  
  24. private static String userName;
  25.  
  26. private static String password;
  27.  
  28. public static String getHost() {
  29. return host;
  30. }
  31. public static void setHost(String host) {
  32. RabbitMQProperties.host = host;
  33. }
  34. public static int getPort() {
  35. return port;
  36. }
  37. public static void setPort(int port) {
  38. RabbitMQProperties.port = port;
  39. }
  40. public static String getUserName() {
  41. return userName;
  42. }
  43. public static void setUserName(String userName) {
  44. RabbitMQProperties.userName = userName;
  45. }
  46. public static String getPassword() {
  47. return password;
  48. }
  49. public static void setPassword(String password) {
  50. RabbitMQProperties.password = password;
  51. }
  52.  
  53. }

各属性和方法都是静态的,问题就出在这里,于是将静态的均修改掉如下

属性bean

  1. /**
  2. *
  3. */
  4. package com.sharp.forward.config;
  5.  
  6. import org.springframework.boot.context.properties.ConfigurationProperties;
  7. import org.springframework.context.annotation.PropertySource;
  8. import org.springframework.stereotype.Component;
  9.  
  10. /**
  11. * @author 醉逍遥
  12. *
  13. */
  14. @Component
  15. @ConfigurationProperties(prefix="rabbit.config")
  16. @PropertySource(value="classpath:config/rabbitmq.properties",encoding="utf-8")
  17. public class RabbitMQProperties {
  18.  
  19. public String getHost() {
  20. return host;
  21. }
  22.  
  23. public void setHost(String host) {
  24. this.host = host;
  25. }
  26.  
  27. public int getPort() {
  28. return port;
  29. }
  30.  
  31. public void setPort(int port) {
  32. this.port = port;
  33. }
  34.  
  35. public String getUserName() {
  36. return userName;
  37. }
  38.  
  39. public void setUserName(String userName) {
  40. this.userName = userName;
  41. }
  42.  
  43. public String getPassword() {
  44. return password;
  45. }
  46.  
  47. public void setPassword(String password) {
  48. this.password = password;
  49. }
  50.  
  51. private String host;
  52.  
  53. private int port;
  54.  
  55. private String userName;
  56.  
  57. private String password;
  58.  
  59. }

启动类

  1. package com.sharp.forward;
  2.  
  3. import org.mybatis.spring.annotation.MapperScan;
  4. import org.slf4j.Logger;
  5. import org.slf4j.LoggerFactory;
  6. import org.springframework.beans.factory.annotation.Autowired;
  7. import org.springframework.boot.CommandLineRunner;
  8. import org.springframework.boot.SpringApplication;
  9. import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
  10. import org.springframework.boot.autoconfigure.SpringBootApplication;
  11.  
  12. import com.sharp.forward.config.RabbitMQProperties;
  13.  
  14. @SpringBootApplication
  15. //@ImportResource("classpath:config/application-user-service-dubbo.xml")
  16. @MapperScan(basePackages= {"com.sharp.forward.mapper"})
  17. @EnableAutoConfiguration
  18. public class Application implements CommandLineRunner{
  19.  
  20. private static final Logger log = LoggerFactory.getLogger(Application.class);
  21. public static void main(String[] args) {
  22. SpringApplication.run(Application.class, args);
  23. }
  24.  
  25. @Autowired
  26. private RabbitMQProperties rabbitMQProperties;
  27. /**
  28. * @param args
  29. * @throws Exception
  30. */
  31. @Override
  32. public void run(String... args) throws Exception {
  33. String config = "host: " + rabbitMQProperties.getHost()
  34. + ", config.port:" + rabbitMQProperties.getPort()
  35. + ", config.userName:" + rabbitMQProperties.getUserName();
  36.  
  37. log.info("SpringBoot2.0实现自定义properties配置文件与JavaBean映射:" + config);
  38.  
  39. }
  40.  
  41. }

再次启动如下:

说明属性值已经读取。

同样将属性bean修改为如下也不能在在初始化中为静态变量赋值

  1. /**
  2. *
  3. */
  4. package com.sharp.forward.config;
  5.  
  6. import org.springframework.beans.factory.annotation.Value;
  7. import org.springframework.boot.context.properties.ConfigurationProperties;
  8. import org.springframework.context.annotation.Configuration;
  9. import org.springframework.context.annotation.PropertySource;
  10. import org.springframework.stereotype.Component;
  11.  
  12. /**
  13. * @author 醉逍遥
  14. *
  15. */
  16. @Component
  17. @ConfigurationProperties(prefix="rabbit.config")
  18. @PropertySource(value="classpath:config/rabbitmq.properties",encoding="utf-8")
  19. public class RabbitMQProperties {
  20.  
  21. private static String host;
  22.  
  23. private static int port;
  24.  
  25. private static String userName;
  26.  
  27. private static String password;
  28.  
  29. public static String getHost() {
  30. return host;
  31. }
  32. @Value(value="${host}")
  33. public static void setHost(String host) {
  34. RabbitMQProperties.host = host;
  35. System.out.println("host----------->"+host);
  36. }
  37. public static int getPort() {
  38. return port;
  39. }
  40. @Value(value="${rabbit.config.port}")
  41. public static void setPort(int port) {
  42. RabbitMQProperties.port = port;
  43. System.out.println("port----------->"+port);
  44. }
  45. public static String getUserName() {
  46. return userName;
  47. }
  48. @Value(value="${userName}")
  49. public static void setUserName(String userName) {
  50. RabbitMQProperties.userName = userName;
  51. }
  52. public static String getPassword() {
  53. return password;
  54. }
  55. public static void setPassword(String password) {
  56. RabbitMQProperties.password = password;
  57. }
  58.  
  59. }

运行结果同样都是空或0;

参考https://www.cnblogs.com/hsz-csy/p/9625950.html,可以解决为静态变量赋值的问题,set方法一定要是非静态的

修改为

  1. /**
  2. *
  3. */
  4. package com.sharp.forward.config;
  5.  
  6. import org.springframework.beans.factory.annotation.Value;
  7. import org.springframework.boot.context.properties.ConfigurationProperties;
  8. import org.springframework.context.annotation.Configuration;
  9. import org.springframework.context.annotation.PropertySource;
  10. import org.springframework.stereotype.Component;
  11.  
  12. /**
  13. * @author 醉逍遥
  14. *
  15. */
  16. @Component
  17. @ConfigurationProperties(prefix="rabbit.config")
  18. @PropertySource(value="classpath:config/rabbitmq.properties",encoding="utf-8")
  19. public class RabbitMQProperties {
  20.  
  21. private static String host;
  22.  
  23. private static int port;
  24.  
  25. private static String userName;
  26.  
  27. private static String password;
  28.  
  29. public static String getHost() {
  30. return host;
  31. }
  32. @Value(value="${host}")
  33. public static void setHost(String host) {
  34. RabbitMQProperties.host = host;
  35. System.out.println("host----------->"+host);
  36. }
  37. public static int getPort() {
  38. return port;
  39. }
  40. @Value(value="${rabbit.config.port}")
  41. public void setPort(int port) {
  42. RabbitMQProperties.port = port;
  43. System.out.println("port----------->"+port);
  44. }
  45. public static String getUserName() {
  46. return userName;
  47. }
  48. @Value(value="${userName}")
  49. public void setUserName(String userName) {
  50. RabbitMQProperties.userName = userName;
  51. }
  52. public static String getPassword() {
  53. return password;
  54. }
  55. public static void setPassword(String password) {
  56. RabbitMQProperties.password = password;
  57. }
  58.  
  59. }

其他不变,

com.sharp.forward.Application - SpringBoot2.0实现自定义properties配置文件与JavaBean映射:host: null, config.port:5672, config.userName:guest

host没取到是因为value中路径写个重复前缀的实验用了。

springboot自定义属性文件与bean映射注入属性值的更多相关文章

  1. spring练习,使用Eclipse搭建的Spring开发环境,使用set注入方式为Bean对象注入属性值并打印输出。

    相关 知识 >>> 相关 练习 >>> 实现要求: 使用Eclipse搭建的Spring开发环境,使用set注入方式为Bean对象注入属性值并打印输出.要求如下: ...

  2. SpringBoot注解把配置文件自动映射到属性和实体类实战

    SpringBoot注解把配置文件自动映射到属性和实体类实战 简介:讲解使用@value注解配置文件自动映射到属性和实体类 1.配置文件加载 方式一 1.Controller上面配置 @Propert ...

  3. SpringBoot拦截器中Bean无法注入(转)

    问题 这两天遇到SpringBoot拦截器中Bean无法注入问题.下面介绍我的思考过程和解决过程: 1.由于其他bean在service,controller层注入一点问题也没有,开始根本没意识到Be ...

  4. Spring(八):Spring配置Bean(一)BeanFactory&ApplicationContext概述、依赖注入的方式、注入属性值细节

    在Spring的IOC容器里配置Bean 配置Bean形式:基于xml文件方式.基于注解的方式 在xml文件中通过bean节点配置bean: <?xml version="1.0&qu ...

  5. spring:为javabean的集合对象注入属性值

    spring:为JavaBean的集合对象注入属性值 在 spring 中可以对List.Set.Map 等集合进行配置,不过根据集合类型的不同,需要使用不同的标签配置对应相应的集合. 1.创建 Ts ...

  6. spring读取classpath目录下的配置文件通过表达式去注入属性值.txt

    spring读取配置文件: 1. spring加载配置文件: <context:property-placeholder location="classpath:config/syst ...

  7. Spring之使用注解实例化Bean并注入属性

    1.准备工作 (1)导入jar包 除了上篇文章使用到的基本jar包外,还得加入aop的jar包,所有jar包如下 所需jar包 (2)配置xml <?xml version="1.0& ...

  8. Java反射之Bean修改更新属性值等工具类

    package com.bocean.util; import java.lang.annotation.Annotation; import java.lang.reflect.Field; imp ...

  9. Android布局文件layout.xml的一些属性值

        第一类:属性值 true或者 false android:layout_centerHrizontal 水平居中 android:layout_centerVertical 垂直居中 andr ...

随机推荐

  1. windows中共存python2和python3以及各自pip的配置

    到官网下载相应系统的python2和python3的安装程序 官网链接:https://www.python.org/ 下载完成后,如下两个安装程序 分别把python2的安装程序和python3的放 ...

  2. 「快学springboot」SpringBoot整合freeMark模板引擎

    前言 虽然现在流行前后端分离开发和部署,但是有时候还是需要用到服务端渲染页面的.比如:需要考虑到SEO优化等问题的时候,FreeMark其实还是很有作用的.本人的博客本来是用React开发的,但是后来 ...

  3. Spring报错汇总笔记

    报错信息: org.springframework.beans.factory.BeanDefinitionStoreException: Unexpected exception parsing X ...

  4. 14 JavaScript Window对象

    Window对象表示一个浏览器窗口或者一个框架. 在客户端JavaScript中,window对象是全局对象,所有的表达式都在当前的环境中计算. Window对象的子对象: JavaScript do ...

  5. 十二 INPUT逻辑视图的配置,回显错误信息

    Action接口中提供了五个逻辑视图的名称 SUCCESS ERROR LOGIN INPUT:input在某些拦截器会使用 NONE 配置逻辑视图:struts_demo2.xml,配置后出现错误信 ...

  6. Java中四种遍历Map对象的方法

    方法一:在for-each循环中使用entry来遍历,通过Map.entrySet遍历key和value,这是最常见的并且在大多数情况下也是最可取的遍历方式.在键值都需要时使用. Map<Int ...

  7. Spark教程——(11)Spark程序local模式执行、cluster模式执行以及Oozie/Hue执行的设置方式

    本地执行Spark SQL程序: package com.fc //import common.util.{phoenixConnectMode, timeUtil} import org.apach ...

  8. nodejs中this详解

    最近在用Nodejs进行APP运维服务管理系统开发时发现,nodejs中的this经常会变,查了下资料后发现this在不同的代码位置中代表不同的涵义,在实际运用过程中可以用var self = thi ...

  9. Codeforces1307D. Cow and Fields

    对于本题,最短路,考虑bfs,那么我们可以跑2次bfs,求出每个点到1与n的最短路,设为x_a, x_b,那我们可以把问题转换成max(min{x_a+y_b,x_b+y_a}+1)(x,y属于1到n ...

  10. 「luogu2617」Dynamic Rankings

    「luogu2617」Dynamic Rankings 传送门 树套树直接上树状数组套主席树,常数很大就是了. 树套树参考代码: /*-------------------------------- ...