Spring bootjava
簡述web
spring boot使用「習慣優於配置」的理念,可讓項目快速的運行;spring
使用spring boot很容易建立一個獨立運行(內嵌servlet容器)基於spring框架的項目,開發者能夠不用或者只使用不多的spring配置。apache
父級依賴 編程
<parent> json
<groupId>org.springframework.boot</groupId> tomcat
<artifactId>spring-boot-starter-parent</artifactId> 安全
<version>1.5.1.RELEASE</version> mvc
<relativePath/> <!-- lookup parent from repository -->app
</parent>
有了spring-boot-starter-parent,就是一個spring boot項目,並且定義了一些jar包的version,能夠省去version標籤
起步依賴Spring-boot-starter-xx
如咱們以前要實現web功能,引入了spring-boot-starter-web這個起步依賴,定義了對其餘庫的傳遞依賴,這些東西加在一塊兒即支持某項功能,它自動組裝了spring-web,spring-webmvc等jar包
基本配置
入口類:spring boot一般有一個名爲*Application的入口類,入口類中有一個main方法。
@SpringBootApplication是spring boot的核心註解,它是一個組合註解:
@Configuration —— 聲明當前類位配置類(xml)
@EnableAutoConfiguration —— 讓 Spring Boot 根據類路徑中的 jar 包依賴爲當前項目進行自動配置,
例如添加了 spring-boot-starter-web 依賴,會自動添加 Tomcat 和 Spring MVC 的依賴,那麼 Spring Boot 會對 Tomcat 和 Spring MVC 進行自動配置。
@ComponentScan —— 自動掃描包,掃描該層下全部聲明bean的註解類,而且向spring容器中註冊爲bean;通常爲@ComponentSatn("包路徑")。
外部配置
spring boot容許使用properties文件,命令行等做爲外部配置。
命令行:如spring boot是能夠基於jar包運行的,
java -jar xx.jar --server.port=9090
常規屬性配置:
application.properties文件中:
book.authour=sun
book.name=spring boot
入口類:
@RestController //等價於@Controller+@ResponseBody的結合,使用這個註解的類裏面的方法都以json格式輸出,而且是將函數的返回值直 接填入HTTP響應體中
@SpringBootApplication
public class DemoApplication {
@Value("${book.name}")
private String bookname;
@RequestMapping("/")
String index(){
return "Hello Spring boot,bookname:"+bookname;
}
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
類型安全的配置:
爲了簡化每一個屬性都由@value對應,經過@ConfigurationProperties將properties屬性和一個bean及其屬性關聯。
@Component
@ConfigurationProperties(prefix = "book") //使用的配置參數的前綴
@PropertySource("classpath:book.properties") //配置文件的位置
public class Book {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
@RestController
@SpringBootApplication
public class DemoApplication {
@Autowired
private Book book;
@RequestMapping("/")
String index(){
return "Hello Spring boot,bookname:"+book.getName();
}
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
profile配置
profile是spring boot用來針對不一樣的環境對不一樣的配置提供支持的,全局profile配置使用application-{profile}.properties,經過在application.properties中設置spring.profile.active=xx來制定活動的profile。
spring boot註冊Servlet,Filter,Listener
傳統的java ee是在web.xml中配置filter等信息,而spring boot支持兩種方式:代碼註冊;註解註冊。
1.代碼註冊:
建立自定義的filter
public class TestFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain)
throws IOException, ServletException {
System.out.println("TestFilter");
}
@Override
public void destroy() {
}
}
在配置類中註冊過濾器:
@Configuration //@Configuration:標註當前類是配置類,並會將當前類內聲明的一個或多個bean加入到spring容器中
public class WebConfig {
@Bean //至關於XML中的<bean></bean>,放在方法的上面,而不是類,意思是產生一個bean,並交給spring管理。
public FilterRegistrationBean getDemoFilter(){
TestFilter demoFilter = new TestFilter();
FilterRegistrationBean registrationBean=new FilterRegistrationBean();
registrationBean.setFilter(demoFilter);
List<String> urlPatterns=new ArrayList<String>();
urlPatterns.add("/*"); //攔截路徑,能夠添加多個
registrationBean.setUrlPatterns(urlPatterns);
registrationBean.setOrder(1);
return registrationBean;
}
}
2.註解註冊
建立自定義的filter,加@WebFilter註解
@Order(1)
@WebFilter(filterName = "testFilter2」, urlPatterns = "/*")
public class TestFilter2 implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain)
throws IOException, ServletException {
filterChain.doFilter(servletRequest,servletResponse);
}
@Override
public void destroy() {
}
}
在工程入口加上註解@ServletComponentScan,實現自動的掃描註冊(帶有WebFilter,WebServlet,WebListener註解的類),不用在代碼中寫registrationBean.setFilter
@SpringBootApplication
@ServletComponentScan
public class SpringBootSimpleApplication {
public static void main(String[] args) {
SpringApplication.run(SpringBootSimpleApplication.class, args);
}
}
Spring boot SSL配置
SSL(security sockets layer安全套接層)位於TCP/IP協議和各類應用層協議(如HTTP)之間,爲數據通訊提供安全支持。採用了SSL以後,HTTP就有了HTTPS的加密,證書和完整性保護這些功能。
1.使用SSL首先須要生成證書,能夠經過jdk裏的證書管理工具keytool生成自簽名的證書;
2.配置SSL:spring boot容許在application.properties中配置http或https,可是隻能配置一個,另一個須要以編程的方式配置。https比較複雜,因此在配置文件中配置https信息:
#https端口號.
server.port: 443
#證書路徑.
server.ssl.key-store: classpath:keystore.p12
#證書密碼
server.ssl.key-store-password: 123456
#祕鑰庫類型
server.ssl.keyStoreType: JKS
#證書別名
server.ssl.keyAlias: tomcat
3.此時,能夠在頁面訪問https的網頁,可是訪問不到http的網頁,還須要實現http到https的重定向
4.代碼中配置http信息,並添加tomcat的connector,實現自動跳轉
@Bean
public EmbeddedServletContainerFactory servletContainer() {
TomcatEmbeddedServletContainerFactory tomcat = new TomcatEmbeddedServletContainerFactory() {
@Override
protected void postProcessContext(Context context) {
SecurityConstraint securityConstraint = new SecurityConstraint();
securityConstraint.setUserConstraint("CONFIDENTIAL");
SecurityCollection collection = new SecurityCollection();
collection.addPattern("/*");
securityConstraint.addCollection(collection);
context.addConstraint(securityConstraint);
}
};
//添加鏈接配置,http的配置信息.
tomcat.addAdditionalTomcatConnectors(initiateHttpConnector());
return tomcat;
}
/**
* 配置http鏈接信息.
*/
private Connector initiateHttpConnector() {
Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
connector.setScheme("http");
connector.setPort(8080);
connector.setSecure(false);
connector.setRedirectPort(443);
return connector;
}
5.此時訪問
http://localhost:8080自動轉到https://localhost:443關於@Configuration註解、@Bean註解以及配置自動掃描
轉自https://blog.csdn.net/javaloveiphone/article/details/52182899