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
- springboot 基本知识
- 基本知识
- 基本知识
- 基本知识
- 基本知识
- 基本知识
- 基本知识
- 基本知识
- 基本知识
- springboot
- SpringBoot
- SpringBoot
- springboot
- SpringBoot
- springboot
- SpringBoot
- springboot
- Springboot
- MySQL错误代码大全
- IoC
- Maven学习 (三) 使用m2eclipse创建web项目
- JS新API标准 地理定位(navigator.geolocation)
- MySQ语句查询
- springboot 基本知识
- 关于em && rem单位
- 从游戏设计角度——探究桌上足球玩法
- InputMethodService详解
- php将敏感词替换为*的方法
- 云的选择
- Android app借助第三方软件打开pdf文档
- Maven学习 (四) 使用Nexus搭建Maven私服
- 获取当前显示页面的Activity名字命令