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>