Home  >  Article  >  Java  >  How SpringBoot2 underlying annotation @ConfigurationProperties configures binding

How SpringBoot2 underlying annotation @ConfigurationProperties configures binding

WBOY
WBOYforward
2023-05-12 08:22:05867browse

We usually put some frequently changed things into the configuration file.

For example, the port number server.port=8080 previously written in the configuration file application.properties, and other common ones include database connection information, etc.

Then, my database connection information is placed in the configuration file. If I want to use it, I must parse the configuration file and use the parsed content in the bean.

The whole scenario is actually binding all the configurations in the configuration file to the java bean.

To complete this scenario, it is still a bit troublesome to write based on java native code. Usually, an encapsulation is made to read the contents of the properties file and encapsulate it into a JavaBean:

public class getProperties {     public static void main(String[] args) throws FileNotFoundException, IOException {         Properties pps = new Properties();         pps.load(new FileInputStream("a.properties"));         Enumeration enum1 = pps.propertyNames();//得到配置文件的名字         while(enum1.hasMoreElements()) {             String strKey = (String) enum1.nextElement();             String strValue = pps.getProperty(strKey);             System.out.println(strKey + "=" + strValue);             //封装到JavaBean             ... ...         }     }

Here, the Properties class is used to load the configuration filea. properties, and then traverse each k-v in the configuration file. After obtaining it, you can use it in the corresponding place.

This process is simplified in springboot, which is configuration binding.

Configuration binding

Configuration binding is completed by using the annotation @ConfigurationProperties. Note that it needs to be used in conjunction with @Component.

Create a new component Car, with two properties: brand and price:

@Componentpublic class Car {    private String brand;    private Integer price;// get set tostring 就不贴了

In the configuration file application.properties, set some properties Value, for example:

mycar.brand=QQmycar.price=9999

Use @ConfigurationProperties annotation and add it to the component:

@Component@ConfigurationProperties(prefix = "mycar")public class Car {    private String brand;    private Integer price;... ...

The prefix passed in is the prefix in the configuration file, here is mycar.

Verification

Now let’s test whether the binding is successful. Continue to add a controller method in the previous HelloController:

@RestControllerpublic class HelloController {    @Autowired    Car car;    @RequestMapping("/car")    public Car car() {        return car;    }    @RequestMapping("/hello")    public String Hello() {        return "Hello SpringBoot2 你好";    }}

Deploy the application, The browser accesses http://localhost:8080/car:

How SpringBoot2 underlying annotation @ConfigurationProperties configures binding

and the binding is successful.

Another way

In addition to the above method, you can also use @EnableConfigurationProperties @ConfigurationProperties to complete the binding.

Note that the @EnableConfigurationProperties annotation should be used on the configuration class to indicate the function of enabling property configuration:

//@ConditionalOnBean(name = "pet1")@Import({User.class, DBHelper.class})@Configuration(proxyBeanMethods = true)@ImportResource("classpath:beans.xml")  //配置文件的类路径@EnableConfigurationProperties(Car.class) //开启属性配置的功能public class MyConfig {    @Bean("user1")    public User user01(){        User pingguo = new User("pingguo",20);        pingguo.setPet(tomcatPet());        return pingguo;    }    @Bean("pet22")    public Pet tomcatPet(){        return new Pet("tomcat");    }}

@EnableConfigurationProperties(Car.class)Pass in the class to enable configuration, which can automatically register the Car into the container, which means that the @Component on the previous Car is no longer needed.

//@Component@ConfigurationProperties(prefix = "mycar")public class Car {    private String brand;    private Integer price;

Re-deploy and access the next address, it still works.

How SpringBoot2 underlying annotation @ConfigurationProperties configures binding

Regarding the second usage scenario, for example, the Car here is a class in a third-party package, but the source code does not have the @Component annotation. , then you can bind in this way.

Finally, remember that when using @ConfigurationProperties(prefix = "mycar") this configuration is bound to the springboot core configuration file application.properties file The binding relationship established by the content.

The above is the detailed content of How SpringBoot2 underlying annotation @ConfigurationProperties configures binding. For more information, please follow other related articles on the PHP Chinese website!

Statement:
This article is reproduced at:yisu.com. If there is any infringement, please contact admin@php.cn delete