demo-helloworld,properties,actuator,admin-server/client
spring-boot-demo-helloworld
Runing spring boot demo helloworld
$ mvn spring-boot:run
pom.xml
<?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><artifactId>spring-boot-demo-helloworld</artifactId><version>1.0.0-SNAPSHOT</version><packaging>jar</packaging><parent><groupId>com.xkcoding</groupId><artifactId>spring-boot-demo</artifactId><version>1.0.0-SNAPSHOT</version></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-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId></dependency></dependencies><build><finalName>spring-boot-demo-helloworld</finalName><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build>
</project>
SpringBootDemoHelloworldApplication.java
@SpringBootApplication
@RestController
public class SpringBootDemoHelloworldApplication {public static void main(String[] args) {SpringApplication.run(SpringBootDemoHelloworldApplication.class, args);}@GetMapping("/hello")public String sayHello(@RequestParam(required = false, name = "who") String who) {if (StrUtil.isBlank(who)) {who = "World";}return StrUtil.format("Hello, {}!", who);}
}
application.yml
server:port: 8080servlet:context-path: /demo
spring-boot-demo-properties
pom.xml
<?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><artifactId>spring-boot-demo-properties</artifactId><version>1.0.0-SNAPSHOT</version><packaging>jar</packaging><parent><groupId>com.xkcoding</groupId><artifactId>spring-boot-demo</artifactId><version>1.0.0-SNAPSHOT</version></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-web</artifactId></dependency><!--在 META-INF/additional-spring-configuration-metadata.json 中配置可以去除 application.yml 中自定义配置的红线警告,并且为自定义配置添加 hint 提醒--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-configuration-processor</artifactId><optional>true</optional></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId></dependency></dependencies><build><finalName>spring-boot-demo-properties</finalName><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build>
</project>
ApplicationProperty.java
@Data
@Component
public class ApplicationProperty {@Value("${application.name}")private String name;@Value("${application.version}")private String version;
}
DeveloperProperty.java
@Data
@ConfigurationProperties(prefix = "developer")
@Component
public class DeveloperProperty {private String name;private String website;private String qq;private String phoneNumber;
}
PropertyController.java
@RestController
public class PropertyController {private final ApplicationProperty applicationProperty;private final DeveloperProperty developerProperty;@Autowiredpublic PropertyController(ApplicationProperty applicationProperty, DeveloperProperty developerProperty) {this.applicationProperty = applicationProperty;this.developerProperty = developerProperty;}@GetMapping("/property")public Dict index() {return Dict.create().set("applicationProperty", applicationProperty).set("developerProperty", developerProperty);}
}
additional-spring-configuration-metadata.json
位置: src/main/resources/META-INF/additional-spring-configuration-metadata.json
{"properties": [{"name": "application.name","description": "Default value is artifactId in pom.xml.","type": "java.lang.String"},{"name": "application.version","description": "Default value is version in pom.xml.","type": "java.lang.String"},{"name": "developer.name","description": "The Developer Name.","type": "java.lang.String"},{"name": "developer.website","description": "The Developer Website.","type": "java.lang.String"},{"name": "developer.qq","description": "The Developer QQ Number.","type": "java.lang.String"},{"name": "developer.phone-number","description": "The Developer Phone Number.","type": "java.lang.String"}]
}
spring-boot-demo-actuator
pom.xml
<?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><artifactId>spring-boot-demo-actuator</artifactId><version>1.0.0-SNAPSHOT</version><packaging>jar</packaging><parent><groupId>com.xkcoding</groupId><artifactId>spring-boot-demo</artifactId><version>1.0.0-SNAPSHOT</version></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-actuator</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-security</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>org.springframework.security</groupId><artifactId>spring-security-test</artifactId><scope>test</scope></dependency></dependencies><build><finalName>spring-boot-demo-actuator</finalName><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build>
</project>
application.yml
server:port: 8080servlet:context-path: /demo
# 若要访问端点信息,需要配置用户名和密码
spring:security:user:name: xkcodingpassword: 123456
management:# 端点信息接口使用的端口,为了和主系统接口使用的端口进行分离server:port: 8090servlet:context-path: /sys# 端点健康情况,默认值"never",设置为"always"可以显示硬盘使用情况和线程情况endpoint:health:show-details: always# 设置端点暴露的哪些内容,默认["health","info"],设置"*"代表暴露所有可访问的端点endpoints:web:exposure:include: '*'
端点暴露地址
将项目运行起来之后,会在控制台里查看所有可以访问的端口信息
- 打开浏览器,访问:http://localhost:8090/sys/actuator/mappings ,
输入用户名(xkcoding)密码(123456)即可看到所有的mapping信息 - 访问:http://localhost:8090/sys/actuator/beans ,输入用户名(xkcoding)密码(123456)即可看到所有 Spring 管理的Bean
- 其余可访问的路径,参见文档
参考
- actuator文档:
https://docs.spring.io/spring-boot/docs/2.0.5.RELEASE/reference/htmlsingle/#production-ready - 具体可以访问哪些路径,参考:
https://docs.spring.io/spring-boot/docs/2.0.5.RELEASE/reference/htmlsingle/#production-ready-endpoints
spring-boot-demo-admin-server
搭建一个 Spring Boot Admin 的服务端项目,可视化展示自己客户端项目的运行状态。
pom.xml
<?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><artifactId>spring-boot-demo-admin-server</artifactId><version>1.0.0-SNAPSHOT</version><packaging>jar</packaging><name>spring-boot-demo-admin-server</name><description>Demo project for Spring Boot</description><parent><groupId>com.xkcoding</groupId><artifactId>spring-boot-demo-admin</artifactId><version>1.0.0-SNAPSHOT</version></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-web</artifactId></dependency><dependency><groupId>de.codecentric</groupId><artifactId>spring-boot-admin-starter-server</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><build><finalName>spring-boot-demo-admin-server</finalName><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build>
</project>
SpringBootDemoAdminServerApplication.java
@EnableAdminServer
@SpringBootApplication
public class SpringBootDemoAdminServerApplication {public static void main(String[] args) {SpringApplication.run(SpringBootDemoAdminServerApplication.class, args);}
}
application.yml
server:port: 8000
spring-boot-demo-admin-client
pom.xml
<?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><artifactId>spring-boot-demo-admin-client</artifactId><version>1.0.0-SNAPSHOT</version><packaging>jar</packaging><parent><groupId>com.xkcoding</groupId><artifactId>spring-boot-demo-admin</artifactId><version>1.0.0-SNAPSHOT</version></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-web</artifactId></dependency><dependency><groupId>de.codecentric</groupId><artifactId>spring-boot-admin-starter-client</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-security</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><build><finalName>spring-boot-demo-admin-client</finalName><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build>
</project>
application.yml
server:port: 8080servlet:context-path: /demo
spring:application:# Spring Boot Admin展示的客户端项目名,不设置,会使用自动生成的随机idname: spring-boot-demo-admin-clientboot:admin:client:# Spring Boot Admin 服务端地址url: "http://localhost:8000/"instance:metadata:# 客户端端点信息的安全认证信息user.name: ${spring.security.user.name}user.password: ${spring.security.user.password}security:user:name: xkcodingpassword: 123456
management:endpoint:health:# 端点健康情况,默认值"never",设置为"always"可以显示硬盘使用情况和线程情况show-details: alwaysendpoints:web:exposure:# 设置端点暴露的哪些内容,默认["health","info"],设置"*"代表暴露所有可访问的端点include: "*"