标签:
Spring Boot Actuator是Spring Boot的子项目。使用它无需特别配置,即可为应用增加一些生产级别的服务。本教程展示使用Eclipse + Maven来从零开始构建一个RESTful的应用。
该应用作用是访问http://localhost:8080/fuck?name=xxx,会返回json字符串,并且访问http://localhost:8080/metrics 可以看到应用堆的一些信息。
什么是Spring Boot Actuator?
Actuator是个机器术语,目前没有统一的翻译,可以直译为促动器,Actuator通过微小的改变就可产生很大的移动。
Spring Boot Actuator为你的应用提供一些生产环境很需要的特性,如审计,健康和数据采集等。使你可以在部署应用到生产环境后,通过HTTP(需要SpringMVC),JMX甚至remote shell(SSH, Telnet)等来管理和监视应用。例如,HTTP环境下,访问 contextUrl/health 路径即可查询当前环境的磁盘空间,应用和数据库的状态等;访问contextUrl/metrics路径即可查询当前jvm的内存使用情况,线程池的状态等。
https://java.com/zh_CN/download/
http://www.eclipse.org/downloads/packages/eclipse-ide-java-ee-developers/marsr
or
http://www.eclipse.org/downloads/packages/eclipse-ide-java-ee-developers/neonr
https://maven.apache.org/download.cgi
https://marketplace.eclipse.org/content/spring-ide
或Eclipse Marketplace上直接搜索spring ide
※ 如果无法安装,请不要使用Eclipse Marketplace,而使用Install New software,并输入下面地址,安装时选择select all。
■ Neon:
http://dist.springsource.com/release/TOOLS/update/e4.6/
■Mars:
http://dist.springsource.com/release/TOOLS/update/e4.5/
如果此插件装不上,请直接看下文“四、操作指南2 - 使用Eclipse + maven插件构建”
并命名为restdemo
选择Boot版本为1.3.6,依赖选择Actuator和Web
然后点finish完成创建。
package com.example;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class RestdemoApplication {
public static void main(String[] args) {
SpringApplication.run(RestdemoApplication.class, args);
}
}
※ @SpringBootApplication注解根据classpath中的内容为项目提供自动配置。在本应用中,它相当于:@Configuration,
@EnableAutoConfiguration, @ComponentScan三者联合。
package com.example;
/**
* @ClassName: Fuck
* @Description: TODO(这里用一句话描述这个类的作用)
* @author LIUYUEFENG559
* @date 2016年7月11日 下午2:38:22
*/
public class Fuck {
private final long id;
private final String content;
public Fuck(long id, String content) {
this.id = id;
this.content = content;
}
public long getId() {
return id;
}
public String getContent() {
return content;
}
}
package com.example;
import java.util.concurrent.atomic.AtomicLong;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
/**
* @ClassName: FuckController
* @Description: TODO(这里用一句话描述这个类的作用)
* @author LIUYUEFENG559
* @date 2016年7月11日 下午2:40:12
*/
@Controller
@RequestMapping("/fuck")
public class FuckController {
private static final String template = "Hi, %s! Let‘s fuck the GFW, the government and damn 狗日的方滨兴! ";
private final AtomicLong counter = new AtomicLong();
@RequestMapping(method = RequestMethod.GET)
public @ResponseBody Fuck sayFuck(
@RequestParam(value = "name", required = false, defaultValue = "Stranger") String name) {
return new Fuck(counter.incrementAndGet(),
String.format(template, name));
}
}
. ____ _ __ _ _
/\\ / ___‘_ __ _ _(_)_ __ __ _ \ \ \ ( ( )\___ | ‘_ | ‘_| | ‘_ \/ _` | \ \ \ \\/ ___)| |_)| | | | | || (_| | ) ) ) )
‘ |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v1.3.6.RELEASE)
...
2016-07-11 14:46:36.700 INFO 11648 --- [ main] com.example.RestdemoApplication : Started RestdemoApplication in 7.7 seconds (JVM running for 8.844)
※ 等同于选择maven build-> clean package,编译成可独立运行的jar包,然后使用jar -jar xxx.jar
来启动应用。
Spring Boot按照如下顺序加载属性:
(一) 命令行参数。如:java -jar app.jar –name=”Spring”
(二) SPRING_APPLICATION_JSON。如java -Dspring.application.json=’{“foo”:”bar”}’ -jar myapp.jar
(三) 来自于java:comp/env的JNDI属性
(四) Java System properties (System.getProperties()).
(五) OS环境变量
(六) 只有在random.*里包含的属性会产生一个RandomValuePropertySource
(七) jar包外部的,由profile指定的application properties文件(application-{profile}.properties或YAML文件)
(八) jar包内部的,由profile指定的application properties文件(application-{profile}.properties或YAML文件)
(九) jar包外部的application properties(application.properties和YAML)。
(十) jar包内部的application properties(application.properties和YAML)。
(十一) @Configuration注解类内部的@PropertySource注解
(十二) 由SpringApplication.setDefaultProperties设置的默认属性
什么是YAML?
YAML是JSON的超集,比XML文件更易读,非常适合定义层级化配置数据。YAML文件后缀为yml或者ymal,Eclipse中可以安装YEdit插件来编辑YAML文件。
典型的YAML文件内容格式如下:
引入SnakeYAML库会使SpringApplication类自动支持YAML。使用spring-boot-starter会自动引入YAML。
因此在本例子中,可以将template字符串配置到属性文件中。修改application.properties如下:
server.port=8080
fuck.sentence=Hi, %s! Let‘s fuck the GFW, the government and damn \u72D7\u65E5\u7684\u65B9\u6EE8\u5174!
修改FuckController如下:
@Controller
@RequestMapping("/fuck")
public class FuckController {
// private static final String template = "Hi, %s! Let‘s fuck the GFW, the
// government and damn 狗日的方滨兴! ";
private final AtomicLong counter = new AtomicLong();
@Value("${fuck.sentence}")
private String template;
@RequestMapping(method = RequestMethod.GET)
public @ResponseBody Fuck sayFuck(
@RequestParam(value = "name", required = false, defaultValue = "Stranger") String name) {
return new Fuck(counter.incrementAndGet(),
String.format(template, name));
}
}
再次运行后结果同第5步。
这样将得到Spring框架的Servlet3.0支持,并且可以在应用被servlet容器启动前进行一些配置。典型的实现方法是让应用的主类集成SpringBootServletInitializer 。
本例修改RestdemoApplication类如下:
package com.example;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.context.web.SpringBootServletInitializer;
@SpringBootApplication
public class RestdemoApplication extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(
SpringApplicationBuilder builder) {
return builder.sources(RestdemoApplication.class);
}
public static void main(String[] args) {
SpringApplication.run(RestdemoApplication.class, args);
}
}
※ 若使用3.0以前的servlet,容器并不支持ServletContextInitializer。这时需要增加web.xml,并在web.xml中配置DispatcherServlet来加载ApplicationContext。
这样可以防止嵌入式servlet容器与war包要被部署到的servlet容器相互干扰。
本例中修改pom如下:
<packaging>war</packaging>
...
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
mvn clean package打包成war后放到tomcat的webapps文件夹下即可。
新建 -> Maven -> Maven Project -> Create a simple project
修改pom文件加入以下内容:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.3.6.RELEASE</version>
<relativePath /> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<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-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
将步骤三中所示的三个java文件(Fuck.java, FuckController.java, RestdemoApplication.java)及对应的package拷贝到src/main/java下
将步骤三中所示的application.properties文件拷贝到src/main/resources目录下。
项目名右键 -> run as -> Maven build… , 在goal中填入”spring-boot:run”,点击运行。
还可以这样运行:
可以在命令行使用 mvn spring-boot:run 来编译运行应用。
也可以使用mvn clean package将应用打包成fat jar包后,使用java jar xxx.jar包来运行应用。
链接
https://spring.io/guides/gs/actuator-service/
https://spring.io/blog/2015/03/18/spring-boot-support-in-spring-tool-suite-3-6-4
http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/
Spring Boot示例 - 1. 使用Spring Boot Actuator构建RESTful web service
标签:
原文地址:http://blog.csdn.net/qiutongyeluo/article/details/51880771