通常用來放在父項目中,來聲明依賴,子項目引入相關依賴而不須要指定版本號,好處就是解決依賴衝突,統一管理依賴版本號java
利用pom的繼承,一處聲明,到處使用。在最頂級的spring-boot-dependencies中,使用dependencyManagement讓全部子項目引用一個依賴而不用顯式的列出版本號,將結構信息,部署信息,共同的依賴信息放置在統一的位置。dependencyManagement只聲明依賴,並不真正引入,所以子項目須要經過dependencies引入相關依賴。spring
maven依賴shell
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>1.5.6.RELEASE</version> <type>pom</type> <scope>import</scope> </dependency>
devtools是spring boot提供的工具。運行打包的應用程序時,開發人員工具會自動禁用。若是你經過java -jar
或者其餘特殊的類加載器進行啓動時,都會被認爲是「生產環境的應用」。數據庫
將依賴標記爲optional
可選是一種最佳作法,能夠防止將devtools依賴傳遞到其餘模塊中。緩存
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <optional>true</optional> </dependency>
一、禁用默認緩存安全
Spring Boot支持的一些庫中默認會使用緩存。雖然緩存在生產中很是有益,可是在開發過程當中有可能產生反效果,devtools將默認禁用這些緩存選項app
二、自動重啓maven
類路徑的文件發生更改時,會觸發自動重啓,某些資源修改不必定須要觸發重啓,例如Thymeleaf模板。默認狀況下更改/META-INF/maven , /META-INF/resources , /resources , /static , /public或/templates中的資源不會觸發重啓,但會觸發實時從新加載。 若是要自定義這些排除項,可使用spring.devtools.restart.exclude屬性,若是想保留上面的默認排除項,還想增長新的,可使用spring.devtools.restart.additional-exclude屬性ide
Actuator提供了不少生產級的特性,好比監控和度量Spring Boot應用程序。這些特性能夠經過REST端點、遠程shell和JMX得到。spring-boot
Maven引入依賴
<dependency> <!-- It is in order to get app info --> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency>
應用啓動日誌會有以下信息,代表獲取一些信息的url
下面列出最經常使用的一些
解釋一下上圖配置
將端點總體禁用,而後autoconfig、shutdown、beans啓用,將shutdown的路徑由/shutdown改成/kill
actuator就是爲了查看應用的一些信息,其中不乏一些敏感信息,對這些端點進行保護仍是頗有必要。
使用Spring Security,下面以/shutdown,/metrics端點爲例
① 權限認證
@Override protected void configure(HttpSecurity http) throws Exception { http .authorizeRequests() .antMatchers("/").access("hasRole('READER')") .antMatchers("/shutdown","/metrics").access("hasRole('ADMIN')")
.antMatchers("/**").permitAll() .and() .formLogin() .loginPage("/login") .failureUrl("/login?error=true"); }
要可以訪問/shutdown,必須用一個帶有admin權限的用戶
② 用戶身份認證
@Override protected void configure(AuthenticationManagerBuilder auth) throws Exception { auth.userDetailsService(new UserDetailsService() { @Override public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { UserDetails user = readerRepository.findOne(username); if (user != null) { return user; } throw new UsernameNotFoundException( "User '" + username + "' not found."); } }) .and() .inMemoryAuthentication() .withUser("admin").password("s3cr3t") .roles("ADMIN", "READER"); }
userDetailsService是使用repository來操做數據庫查詢出對應的用戶,inMemoryAuthentication()是往內存中添加一個用戶,擁有角色ADMIN、READER。
人如其名,是用來保證應用安全的,核心功能受權和認證
默認訪問用戶密碼
若是沒有進行額外配置,那麼應用啓動會生成一串默認密碼。用戶名爲user,密碼在日誌文件或控制檯尋找 Using default security password: 62ccf9ca-9fbe-4993-8566-8468cc33c28c
固然也能夠自定義訪問用戶,在application.yml文件security.user.name,security.user.password制定
還能夠經過自定義編寫配置類繼承WebSecurityConfigurerAdapter類,並在配置類上面加上@Configuration@EnableWebSecurity兩個註解,重寫 protected void configure(HttpSecurity http) protected void configure(AuthenticationManagerBuilder auth) 兩個方法進行受權和認證,能夠參考上面兩段代碼