主要有几点:
一、导入依赖
springboot的包和:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
版本在父类里统一管理了
<optional>true</optional>
</dependency>
一、配置自定义属性文件
rabbit.config.host=192.168.135.129
rabbit.config.port=5672
rabbit.config.userName=guest
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>下面添加包含进自定义的文件,否则找不到文件报错。
项目启动类代码:
package com.sharp.forward; import org.mybatis.spring.annotation.MapperScan;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.SpringBootApplication; import com.sharp.forward.config.RabbitMQProperties; @SpringBootApplication
//@ImportResource("classpath:config/application-user-service-dubbo.xml")
@MapperScan(basePackages= {"com.sharp.forward.mapper"})
@EnableAutoConfiguration
public class Application implements CommandLineRunner{ private static final Logger log = LoggerFactory.getLogger(Application.class);
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
} /**
* @param args
* @throws Exception
*/
@Override
public void run(String... args) throws Exception {
String config = "host: " + RabbitMQProperties.getHost()
+ ", config.port:" + RabbitMQProperties.getPort()
+ ", config.userName:" + RabbitMQProperties.getUserName(); log.info("SpringBoot2.0实现自定义properties配置文件与JavaBean映射:" + config); } }
启动项目后打印如下:
INFO com.sharp.forward.Application - SpringBoot2.0实现自定义properties配置文件与JavaBean映射:host: null, config.port:0, config.userName:null
说明没有注入进来,然后在看我的属性bean类
/**
*
*/
package com.sharp.forward.config; import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Component; /**
* @author 醉逍遥
*
*/
@Component
@ConfigurationProperties(prefix="rabbit.config")
@PropertySource(value="classpath:config/rabbitmq.properties",encoding="utf-8")
public class RabbitMQProperties { private static String host; private static int port; private static String userName; private static String password; public static String getHost() {
return host;
}
public static void setHost(String host) {
RabbitMQProperties.host = host;
}
public static int getPort() {
return port;
}
public static void setPort(int port) {
RabbitMQProperties.port = port;
}
public static String getUserName() {
return userName;
}
public static void setUserName(String userName) {
RabbitMQProperties.userName = userName;
}
public static String getPassword() {
return password;
}
public static void setPassword(String password) {
RabbitMQProperties.password = password;
} }
各属性和方法都是静态的,问题就出在这里,于是将静态的均修改掉如下
属性bean
/**
*
*/
package com.sharp.forward.config; import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Component; /**
* @author 醉逍遥
*
*/
@Component
@ConfigurationProperties(prefix="rabbit.config")
@PropertySource(value="classpath:config/rabbitmq.properties",encoding="utf-8")
public class RabbitMQProperties { public String getHost() {
return host;
} public void setHost(String host) {
this.host = host;
} public int getPort() {
return port;
} public void setPort(int port) {
this.port = port;
} 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;
} private String host; private int port; private String userName; private String password; }
启动类
package com.sharp.forward; import org.mybatis.spring.annotation.MapperScan;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.SpringBootApplication; import com.sharp.forward.config.RabbitMQProperties; @SpringBootApplication
//@ImportResource("classpath:config/application-user-service-dubbo.xml")
@MapperScan(basePackages= {"com.sharp.forward.mapper"})
@EnableAutoConfiguration
public class Application implements CommandLineRunner{ private static final Logger log = LoggerFactory.getLogger(Application.class);
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
} @Autowired
private RabbitMQProperties rabbitMQProperties;
/**
* @param args
* @throws Exception
*/
@Override
public void run(String... args) throws Exception {
String config = "host: " + rabbitMQProperties.getHost()
+ ", config.port:" + rabbitMQProperties.getPort()
+ ", config.userName:" + rabbitMQProperties.getUserName(); log.info("SpringBoot2.0实现自定义properties配置文件与JavaBean映射:" + config); } }
再次启动如下:
说明属性值已经读取。
同样将属性bean修改为如下也不能在在初始化中为静态变量赋值
/**
*
*/
package com.sharp.forward.config; import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Component; /**
* @author 醉逍遥
*
*/
@Component
@ConfigurationProperties(prefix="rabbit.config")
@PropertySource(value="classpath:config/rabbitmq.properties",encoding="utf-8")
public class RabbitMQProperties { private static String host; private static int port; private static String userName; private static String password; public static String getHost() {
return host;
}
@Value(value="${host}")
public static void setHost(String host) {
RabbitMQProperties.host = host;
System.out.println("host----------->"+host);
}
public static int getPort() {
return port;
}
@Value(value="${rabbit.config.port}")
public static void setPort(int port) {
RabbitMQProperties.port = port;
System.out.println("port----------->"+port);
}
public static String getUserName() {
return userName;
}
@Value(value="${userName}")
public static void setUserName(String userName) {
RabbitMQProperties.userName = userName;
}
public static String getPassword() {
return password;
}
public static void setPassword(String password) {
RabbitMQProperties.password = password;
} }
运行结果同样都是空或0;
参考https://www.cnblogs.com/hsz-csy/p/9625950.html,可以解决为静态变量赋值的问题,set方法一定要是非静态的
修改为
/**
*
*/
package com.sharp.forward.config; import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Component; /**
* @author 醉逍遥
*
*/
@Component
@ConfigurationProperties(prefix="rabbit.config")
@PropertySource(value="classpath:config/rabbitmq.properties",encoding="utf-8")
public class RabbitMQProperties { private static String host; private static int port; private static String userName; private static String password; public static String getHost() {
return host;
}
@Value(value="${host}")
public static void setHost(String host) {
RabbitMQProperties.host = host;
System.out.println("host----------->"+host);
}
public static int getPort() {
return port;
}
@Value(value="${rabbit.config.port}")
public void setPort(int port) {
RabbitMQProperties.port = port;
System.out.println("port----------->"+port);
}
public static String getUserName() {
return userName;
}
@Value(value="${userName}")
public void setUserName(String userName) {
RabbitMQProperties.userName = userName;
}
public static String getPassword() {
return password;
}
public static void setPassword(String password) {
RabbitMQProperties.password = password;
} }
其他不变,
com.sharp.forward.Application - SpringBoot2.0实现自定义properties配置文件与JavaBean映射:host: null, config.port:5672, config.userName:guest
host没取到是因为value中路径写个重复前缀的实验用了。