springboot 基本知识

来源:互联网 发布:211软件专业大学排名 编辑:程序博客网 时间:2024/06/10 13:08

官方建议的代码目录

com +- example     +- myproject         +- Application.java         |         +- domain         |   +- Customer.java         |   +- CustomerRepository.java         |         +- service         |   +- CustomerService.java         |         +- web             +- CustomerController.java

Application.java 典型的代码

package com.example.myproject;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.EnableAutoConfiguration;import org.springframework.context.annotation.ComponentScan;import org.springframework.context.annotation.Configuration;@Configuration@EnableAutoConfiguration@ComponentScanpublic class Application {    public static void main(String[] args) {        SpringApplication.run(Application.class, args);    }}

@ComponentScan

它会扫描(@Component, @Service, @Repository, @Controller)等这些注解,并自动注册为Spring Bean

@SpringBootApplication

等同于同时使用(@Configuration, @EnableAutoConfiguration, @Componentscan)这些注解.

运行Spring Boot

java -jar target/myproject-0.0.1-SNAPSHOT.jar或者java -Xdebug -Xrunjdwp:server=y,transport=dt_socket,address=8000,suspend=n -jar target/myproject-0.0.1-SNAPSHOT.jar或者export MAVEN_OPTS=-Xmx1024m -XX:MaxPermSize=128M -Djava.security.egd=file:/dev/./urandommvn spring-boot:run或者

默认的配置文件名

application.properties

父,子容器设置

new SpringApplicationBuilder()    .bannerMode(Banner.Mode.OFF)    .sources(Parent.class)    .child(Application.class)    .run(args);

Spring boot 中事件监听

SpringApplication.addListeners(…​)

通过注册监听器,来监听相应的事件

访问应用参数

@Componentpublic class MyBean {    @Autowired    public MyBean(ApplicationArguments args) {        boolean debug = args.containsOption("debug");        List<String> files = args.getNonOptionArgs();        // if run with "--debug logfile.txt" debug=true, files=["logfile.txt"]    }}

Spring Boot 监控

<dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-actuator</artifactId></dependency>

添加这个依赖,然后就可以看到启动时加载的信息了:

troller.error(javax.servlet.http.HttpServletRequest)2016-02-14 15:38:21.371  INFO 30028 --- [           main] o.s.w.s.handler.SimpleUrlHandlerMapping  : Mapped URL path [/webjars/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]2016-02-14 15:38:21.371  INFO 30028 --- [           main] o.s.w.s.handler.SimpleUrlHandlerMapping  : Mapped URL path [/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]2016-02-14 15:38:21.405  INFO 30028 --- [           main] o.s.w.s.handler.SimpleUrlHandlerMapping  : Mapped URL path [/**/favicon.ico] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]2016-02-14 15:38:21.884  INFO 30028 --- [           main] o.s.b.a.e.mvc.EndpointHandlerMapping     : Mapped "{[/autoconfig || /autoconfig.json],methods=[GET],produces=[application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter.invoke()2016-02-14 15:38:21.884  INFO 30028 --- [           main] o.s.b.a.e.mvc.EndpointHandlerMapping     : Mapped "{[/dump || /dump.json],methods=[GET],produces=[application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter.invoke()2016-02-14 15:38:21.885  INFO 30028 --- [           main] o.s.b.a.e.mvc.EndpointHandlerMapping     : Mapped "{[/env/{name:.*}],methods=[GET],produces=[application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EnvironmentMvcEndpoint.value(java.lang.String)2016-02-14 15:38:21.885  INFO 30028 --- [           main] o.s.b.a.e.mvc.EndpointHandlerMapping     : Mapped "{[/env || /env.json],methods=[GET],produces=[application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter.invoke()2016-02-14 15:38:21.886  INFO 30028 --- [           main] o.s.b.a.e.mvc.EndpointHandlerMapping     : Mapped "{[/health || /health.json],produces=[application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.HealthMvcEndpoint.invoke(java.security.Principal)2016-02-14 15:38:21.888  INFO 30028 --- [           main] o.s.b.a.e.mvc.EndpointHandlerMapping     : Mapped "{[/metrics/{name:.*}],methods=[GET],produces=[application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.MetricsMvcEndpoint.value(java.lang.String)2016-02-14 15:38:21.888  INFO 30028 --- [           main] o.s.b.a.e.mvc.EndpointHandlerMapping     : Mapped "{[/metrics || /metrics.json],methods=[GET],produces=[application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter.invoke()2016-02-14 15:38:21.890  INFO 30028 --- [           main] o.s.b.a.e.mvc.EndpointHandlerMapping     : Mapped "{[/beans || /beans.json],methods=[GET],produces=[application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter.invoke()2016-02-14 15:38:21.890  INFO 30028 --- [           main] o.s.b.a.e.mvc.EndpointHandlerMapping     : Mapped "{[/mappings || /mappings.json],methods=[GET],produces=[application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter.invoke()2016-02-14 15:38:21.890  INFO 30028 --- [           main] o.s.b.a.e.mvc.EndpointHandlerMapping     : Mapped "{[/configprops || /configprops.json],methods=[GET],produces=[application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter.invoke()2016-02-14 15:38:21.891  INFO 30028 --- [           main] o.s.b.a.e.mvc.EndpointHandlerMapping     : Mapped "{[/info || /info.json],methods=[GET],produces=[application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter.invoke()2016-02-14 15:38:21.891  INFO 30028 --- [           main] o.s.b.a.e.mvc.EndpointHandlerMapping     : Mapped "{[/trace || /trace.json],methods=[GET],produces=[application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter.invoke()

修改前缀

management.contextPath=/my/manager

这样子,就要通过 /my/manager/health 这样子来访问了.

Spring Admin

maven的依赖

<dependency>    <groupId>de.codecentric</groupId>    <artifactId>spring-boot-admin-server</artifactId></dependency><dependency>    <groupId>de.codecentric</groupId>    <artifactId>spring-boot-admin-server-ui</artifactId></dependency>

在配置文件里添加

spring.application.name=Spring Boot Admin Webspring.boot.admin.url=http://localhost:${server.port}/adminspring.boot.admin.context-path=/admin

然后访问: Go

根据不同环境使用 properties

application.propertiesapplication-dev.propertiesapplication-pro.properties

然后设置 spring.profiles.active=xxx ,就可以使用相应的配置文件了.(-Dspring.profiles.active=production)

注意,这里是有继承关系的.即 application.properties 是公共的,即无论在哪种环境,它都会加载的.

如果 spring.profiles.active=default ,就只会加载 application.properties .

如果 spring.profiles.active=dev ,就会加载 application.properties ,然后再加载 application-dev.properties .而且 application-dev.properties 的属性,会覆盖 application.properties 的.

而且,还可以向前引用变量。比如这样子:

hello.world=defhello.world.parent=${hello.world} from parent

使用 Bean 来映射properties文件

@Component@ConfigurationProperties(prefix="person")public class ConnectionSettings {    private String firstName;    public String getFirstName() {        return this.firstName;    }    public void setFirstName(String firstName) {        this.firstName = firstName;    }}

然后 properties 文件 里可以这样子写

person.firstName=xxx或者person.first-name=xxx或者PERSON_FIRST_NAME=xxx

配置自定义Bean

@Configurationpublic class MyConfiguration {    @Bean    public HttpMessageConverters customConverters() {        HttpMessageConverter<?> additional = ...        HttpMessageConverter<?> another = ...        return new HttpMessageConverters(additional, another);    }}

关于静态资源的处理

这是Spring boot 默认情况下配置.

默认情况下,在classpath路径下的 /static (or /public or /resources or /META-INF/resources) 这些目录,是被看作是静态资源的存放路径的.

也可以通过 spring.resources.staticLocations 参数来指定.

打包为普通的 war 包形式

HelloWorldSpringBoot.java

package org.emacsist;import de.codecentric.boot.admin.config.EnableAdminServer;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.boot.builder.SpringApplicationBuilder;import org.springframework.boot.context.web.SpringBootServletInitializer;import org.springframework.cloud.client.discovery.EnableDiscoveryClient;/** * Created by sky on 16-2-14. */@SpringBootApplication@EnableAdminServer@EnableDiscoveryClientpublic class HelloWorldSpringBoot extends SpringBootServletInitializer {    @Override    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {        return builder.sources(HelloWorldSpringBoot.class);    }    public static void main(String[] args) throws Exception {        SpringApplication app = new SpringApplication(HelloWorldSpringBoot.class);        app.run(args);    }}

修改 pom

<packaging>war</packaging><properties>        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>        <start-class>org.emacsist.HelloWorldSpringBoot</start-class>        <java.version>1.8</java.version></properties><dependency>        <groupId>org.springframework.boot</groupId>        <artifactId>spring-boot-starter-tomcat</artifactId>        <scope>provided</scope></dependency>

项目的目录结构改为

src |    |-main        |-webapp            |-WEB-INF其他的按普通的项目目录处理即可.

参考资料

  • Spring Boot

0 0
原创粉丝点击