DynamicProperties动态加载配置文件及XML格式数据返回

1.工程结构


图片.png

2.pom文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.zy</groupId>
    <artifactId>spring-boot-netflix-demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>war</packaging>

    <name>spring-boot-netflix-demo</name>
    <description>spring-boot-netflix-demo</description>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.17.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <!--<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>1.3.2</version>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
            <!--<scope>provided</scope>-->
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <!-- 可动态加载classpath下的config.properties配置文件 -->
        <dependency>
            <groupId>com.netflix.archaius</groupId>
            <artifactId>archaius-core</artifactId>
            <version>0.7.6</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.16.20</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.dataformat</groupId>
            <artifactId>jackson-dataformat-xml</artifactId>
            <version>2.8.11</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

3.yml文件

server:
  port: 8081
spring:
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://127.0.0.1:3306/spring_boot
    username: root
    password: 123456
logging:
  config: classpath:log4j2.xml

3.config.properties文件

lastName=jerry
在项目启动后,若想修改配置文件,并使其动态生效,则需要修改,target目录下的config.properties文件

4.实体类

package com.zy.bean;

import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty;
import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlRootElement;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
# 下面这个注解及controller层的produces类型是返回xml类型的关键
@JacksonXmlRootElement(localName = "employee")
public class Employee {

    @JacksonXmlProperty(localName = "id")
    private Integer id;

    @JacksonXmlProperty(localName = "lastName")
    private String lastName;

    @JacksonXmlProperty(localName = "email")
    private String email;

    @JacksonXmlProperty(localName = "gender")
    private Integer gender;

    @JacksonXmlProperty(localName = "dId")
    private Integer dId;
}

5.controller层

package com.zy.controller;

import com.netflix.config.DynamicProperty;
import com.zy.bean.Employee;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping(value = "/dynamic/", produces = MediaType.APPLICATION_XML_VALUE)
public class DynamicController {

    @PostMapping("getProperties")
    public Employee getProperties(){
        return Employee.builder()
                .id(1)
                /*
                * 默认的,Archaius将查找classpath下名为config.properties文件并读取,这个配置文件可以使包含在一个jar包的根路径下。
                * 另外,你可以使用属性archaius.configurationSource.additionalUrls来包含url形式的文件,多个文件用逗号分割。
                *   注意:配置多属性文件时的属性覆盖,最后读到的属性会覆盖前面相同的属性
                * 列出我们可以修改的一些系统属性
                * Operation                                                 HTTP action                                                                 Notes
                * archaius.configurationSource.defaultFileName              指定Archaius默认加载的配置源属性文件名,默认:classpath:config.properties   config.properties
                * archaius.fixedDelayPollingScheduler.initialDelayMills     延迟加载,默认30秒                                                          30000
                * archaius.fixedDelayPollingScheduler.delayMills            两次属性读取时间间隔,默认1分钟                                                60000
                * */
                .lastName(DynamicProperty.getInstance("lastName").getString())
                .email("jerry@zy.com")
                .gender(1)
                .dId(100)
                .build();
    }
}

6.启动类

package com.zy;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class SpringBootNetflixDemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringBootNetflixDemoApplication.class, args);
    }
}

7.日志文件log4j2.xml

<?xml version="1.0" encoding="utf-8"?>
<Configuration status="info">
    <Properties>
        <Property name="layout">%d [%t] %-5p %c-%m%n</Property>
    </Properties>
    <Appenders>
        <Console name="CONSOLE" target="SYSTEM_OUT">
            <PatternLayout charset="UTF-8" pattern="${layout}" />
        </Console>
        <!--${sys:catalina.base}-->
        <RollingFile name="CATALINA" fileName="./logs/catalina.log"
                     filePattern="./catalina.%d{yyyy-MM-dd}.log.gz">
            <PatternLayout charset="UTF-8" pattern="${layout}" />
            <!-- DefaultRolloverStrategy属性如不设置,则默认为最多同一文件夹下7个文件,这里设置了20 -->
            <SizeBasedTriggeringPolicy size="50MB" />
            <DefaultRolloverStrategy max="20" />
        </RollingFile>
        <RollingFile name="LOCALHOST" fileName="./logs/localhost.log"
                     filePattern="./localhost.%d{yyyy-MM-dd}-%i.log.gz">
            <PatternLayout charset="UTF-8" pattern="${layout}" />
            <SizeBasedTriggeringPolicy size="50MB" />
            <DefaultRolloverStrategy max="20" />
        </RollingFile>
    </Appenders>
    <Loggers>
        <Logger
                name="org.apache.catalina.core.ContainerBase.[Catalina].[localhost]"
                level="info">
            <AppenderRef ref="LOCALHOST" />
        </Logger>
        <Root level="info">
            <AppenderRef ref="CATALINA" />
            <AppenderRef ref="CONSOLE" />
        </Root>
    </Loggers>
</Configuration>
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容