1. 程式人生 > >spring boot(一)

spring boot(一)

spring

Spring boot

簡述

spring boot使用習慣優於配置”的理念,可以讓項目快速的運行;

使用spring boot很容易創建一個獨立運行(內嵌servlet容器)基於spring框架的項目,開發者可以不用或者只使用很少的spring配置。

基本配置

入口類:spring boot通常有一個名為*Application的入口類,入口類中有一個main方法。

@SpringBootApplication是spring boot的核心註解,它是一個組合註解:

@Configuration

@EnableAutoConfiguration

@ComponentScan

外部配置

spring boot允許使用properties文件,命令行等作為外部配置。

命令行:如spring boot是可以基於jar包運行的,

java -jar xx.jar --server.port=9090

常規屬性配置:

application.properties文件中:

book.authour=sun

book.name=spring boot

入口類:

@RestController

@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

public class WebConfig {

@Bean

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


spring boot(一)