国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Spring-Boot學習筆記

curlyCheng / 2549人閱讀

摘要:學習筆記使用很容易創建一個獨立運行運行內嵌容器準生產級別的基于框架的項目,使用你可以不用或者只需要很少的配置。異常消息如果這個錯誤是由異常引起的。錯誤發生時請求的路徑。

Spring-Boot 1.5 學習筆記

使用Spring Boot很容易創建一個獨立運行(運行jar,內嵌Servlet容器)、準生產級別的基于Spring框架的項目,使用Spring Boot你可以不用或者只需要很少的Spring配置。

Spring將很多魔法帶入了Spring應用程序的開發之中,其中最重要的是以下四個核心。

自動配置:針對很多Spring應用程序常見的應用功能,Spring Boot能自動提供相關配置

起步依賴:告訴Spring Boot需要什么功能,它就能引入需要的庫。

命令行界面:這是Spring Boot的可選特性,借此你只需寫代碼就能完成完整的應用程序,無需傳統項目構建。

Actuator:讓你能夠深入運行中的Spring Boot應用程序,一探究竟。

Java版本:推薦使用java8

構建一個Sping Boot的Maven項目,強烈推薦Spring Initializr,它從本質上來說就是一個Web應用程序,它能為你生成Spring Boot項目結構。
Spring Initializr有幾種用法:

1、通過Web界面使用,訪問:http://start.spring.io/

2、通過ide相關插件創建

@SpringBootApplication是Sprnig Boot項目的核心注解,主要目的是開啟自動配置。
使用命令 mvn spring-boot:run”在命令行啟動該應用

配置文件

spring-boot配置文件application.properties支持的屬性列表:http://docs.spring.io/spring-...
1、直接在要使用的地方通過注解@Value(value=”${configName}”)就可以綁定到你想要的屬性上面。
2、在application.properties中的各個參數之間也可以直接引用來使用。

com.name="111"
com.want="222"
com.dudu.yearhope=${com.name}-${com.want}

3、有時候屬性太多了,一個個綁定到屬性字段上太累,官方提倡綁定一個對象的bean,這里我們建一個ConfigBean.java類,頂部需要使用注解@ConfigurationProperties(prefix = “com.xxx”)來指明使用哪個.這點可以參考:org.springframework.boot.autoconfigure.jdbc.DataSourceProperties類的寫法

這里配置完還需要在spring Boot入口類加上@EnableConfigurationProperties并指明要加載哪個bean
比如:@EnableConfigurationProperties(DataSourceProperties.class)

4、有時候我們不希望把所有配置都放在application.properties里面,這時候我們可以另外定義一個,如test.properties,路徑跟也放在src/main/resources下面。
我們新建一個bean類,如下:

@Configuration
@ConfigurationProperties(prefix = "com.md") 
@PropertySource("classpath:test.properties")
public class ConfigTestBean {
    private String name;
    private String want;
    // 省略getter和setter
}

5、隨機值配置
配置文件中${random} 可以用來生成各種不同類型的隨機值,從而簡化了代碼生成的麻煩,例如 生成 int 值、long 值或者 string 字符串。

dudu.number=${random.int}
dudu.uuid=${random.uuid}
dudu.number.less.than.ten=${random.int(10)}
dudu.number.in.range=${random.int[1024,65536]}

6、外部配置-命令行參數配置
如java -jar xx.jar --server.port=9090
其中server.port是application.properties里面的選項

7、Profile-多環境配置
在Spring Boot中多環境配置文件名需要滿足application-{profile}.properties的格式,其中{profile}對應你的環境標識,比如:
application-dev.properties:開發環境
application-prod.properties:生產環境
想要使用對應的環境,有兩種方式

只需要在application.properties中使用spring.profiles.active屬性來設置,值對應上面提到的{profile},這里就是指dev、prod這2個。

當然你也可以用命令行啟動的時候帶上參數:

java -jar xxx.jar --spring.profiles.active=dev

還可以像這樣設置SPRING_PROFILES_ACTIVE環境變量:

$ export SPRING_PROFILES_ACTIVE=production

在代碼里,我們還可以直接用@Profile注解來進行配置
如下:

/**
  * 測試數據庫
  */
@Component
@Profile("testdb")
public class TestDBConnector implements DBConnector {
    @Override
    public void configure() {
        System.out.println("testdb");
    }
}
/**
 * 生產數據庫
 */
@Component
@Profile("devdb")
public class DevDBConnector implements DBConnector {
    @Override
    public void configure() {
        System.out.println("devdb");
    }
}

通過在配置文件激活具體使用哪個實現類spring.profiles.active=testdb

啟動原理解析
@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}
@SpringBootApplication與@EnableAutoConfiguration

@SpringBootApplication背后:打開源碼看看,有三個Annotation原注解:

@Configuration(@SpringBootConfiguration點開查看發現里面還是應用了@Configuration)

@EnableAutoConfiguration

@ComponentScan(如果不指定basePackages等屬性,則默認Spring框架實現會從聲明@ComponentScan所在類的package進行掃描。)

@EnableAutoConfiguration這個Annotation最為重要(點開源碼看看),Spring框架提供的各種名字為@Enable開頭的Annotation定義?比如@EnableScheduling、@EnableCaching、@EnableMBeanExport等,@EnableAutoConfiguration的理念和做事方式其實一脈相承,簡單概括一下就是,借助@Import的支持,收集和注冊特定場景相關的bean定義。

@EnableScheduling是通過@Import將Spring調度框架相關的bean定義都加載到IoC容器。

@EnableMBeanExport是通過@Import將JMX相關的bean定義加載到IoC容器。

而@EnableAutoConfiguration也是借助@Import的幫助,將所有符合自動配置條件的bean定義加載到IoC容器,僅此而已!

借助于Spring框架原有的一個工具類:SpringFactoriesLoader的支持,@EnableAutoConfiguration可以智能的自動配置
SpringFactoriesLoader屬于Spring框架私有的一種擴展方案,其主要功能就是從指定的配置文件META-INF/spring.factories加載配置。
@EnableAutoConfiguration自動配置的魔法騎士是從classpath中搜尋所有的META-INF/spring.factories配置文件,并將其中org.springframework.boot.autoconfigure.EnableutoConfiguration對應的配置項(主要在SpringBoot的autoconfigure依賴包中)通過反射(Java Refletion)實例化為對應的標注了@Configuration的JavaConfig形式的IoC容器配置類,然后匯總為一個并加載到IoC容器。

SpringApplication執行流程

1) 如果使用的是SpringApplication.run靜態方法,那么,這個方法里面首先要創建一個SpringApplication實例,在初始化的時候,它會提前做幾件事情:

根據classpath里面是否存在某個特征類(org.springframework.web.context.ConfigurableWebApplicationContext)來決定是否應該創建一個為Web應用使用的ApplicationContext類型。

使用SpringFactoriesLoader在應用的classpath中查找并加載所有可用的ApplicationContextInitializer,ApplicationListener

2)執行run方法的邏輯,首先遍歷執行所有通過SpringFactoriesLoader可以查找到并加載的SpringApplicationRunListener。調用它們的started()方法。然后
創建并配置當前Spring Boot應用將要使用的Environment(包括配置要使用的PropertySource以及Profile)。然后遍歷調用所有SpringApplicationRunListener的environmentPrepared()的方法。之后,如果SpringApplication的showBanner屬性被設置為true,則打印banner。

3) 根據用戶是否明確設置了applicationContextClass類型以及初始化階段的推斷結果,決定該為當前SpringBoot應用創建什么類型的ApplicationContext并創建完成,然后根據條件決定是否添加ShutdownHook,決定是否使用自定義的BeanNameGenerator,決定是否使用自定義的ResourceLoader,當然,最重要的,將之前準備好的Environment設置給創建好的ApplicationContext使用。

4) ApplicationContext創建好之后,遍歷調用先前找到的ApplicationContextInitializer的initialize(applicationContext)方法來對已經創建好的ApplicationContext進行進一步的處理。
5) 遍歷調用所有SpringApplicationRunListener的contextPrepared()方法。
6) 最核心的一步,將之前通過@EnableAutoConfiguration獲取的所有配置以及其他形式的IoC容器配置加載到已經準備完畢的ApplicationContext。
7) 遍歷調用所有SpringApplicationRunListener的contextLoaded()方法。
8) 調用ApplicationContext的refresh()方法,完成IoC容器可用的最后一道工序。
9) 查找當前ApplicationContext中是否注冊有CommandLineRunner,如果有,則遍歷執行它們。
10) 正常情況下,遍歷執行SpringApplicationRunListener的finished()方法.

模板引擎

Spring Boot為Spring MVC提供適用于多數應用的自動配置功能。在Spring默認基礎上,自動配置添加了以下特性:

引入ContentNegotiatingViewResolver和BeanNameViewResolver beans。

對靜態資源的支持,包括對WebJars的支持。

自動注冊Converter,GenericConverter,Formatter beans。

對HttpMessageConverters的支持。

自動注冊MessageCodeResolver。

對靜態index.html的支持。

對自定義Favicon的支持。

如果想全面控制Spring MVC,你可以添加自己的@Configuration,并使用@EnableWebMvc對其注解。如果想保留Spring Boot MVC的特性,并只是添加其他的MVC配置(攔截器,formatters,視圖控制器等),你可以添加自己的WebMvcConfigurerAdapter類型的@Bean(不使用@EnableWebMvc注解)
例如:配置一個攔截器

@Configuration
public class WebConfiguration extends WebMvcConfigurerAdapter {
    @Bean    public RemoteIpFilter remoteIpFilter() {
        return new RemoteIpFilter();
    }

    @Bean    public LocaleChangeInterceptor localeChangeInterceptor() {
        return new LocaleChangeInterceptor();
    }
    @Override    public void addInterceptors(InterceptorRegistry registry {
        registry.addInterceptor(localeChangeInterceptor());
    }
}

Spring Boot 默認為我們提供了靜態資源處理,使用 WebMvcAutoConfiguration 中的配置各種屬性。
建議大家使用Spring Boot的默認配置方式,提供的靜態資源映射如下:

classpath:/META-INF/resources

classpath:/resources

classpath:/static

classpath:/public

這使用了Spring MVC的ResourceHttpRequestHandler.

Spring Boot支持多種模版引擎包括:

FreeMarker

Groovy

Thymeleaf(官方推薦)

Mustache

JSP技術Spring Boot官方是不推薦的,原因有三:

tomcat只支持war的打包方式,不支持可執行的jar。

Jetty 嵌套的容器不支持jsp

創建自定義error.jsp頁面不會覆蓋錯誤處理的默認視圖,而應該使用自定義錯誤頁面

當你使用上述模板引擎中的任何一個,它們默認的模板配置路徑為:src/main/resources/templates。當然也可以修改這個路徑

配置錯誤頁面

Spring Boot自動配置的默認錯誤處理器會查找名為error的視圖,如果找不到就用默認的白標
錯誤視圖,如圖3-1所示。因此,最簡單的方法就是創建一個自定義視圖,讓解析出的視圖名為
error。
這一點歸根到底取決于錯誤視圖解析時的視圖解析器。

? 實現了Spring的View接口的Bean,其 ID為error(由Spring的BeanNameViewResolver所解析)。

? 如果配置了Thymeleaf,則有名為error.html的Thymeleaf模板。

? 如果配置了FreeMarker,則有名為error.ftl的FreeMarker模板。

? 如果配置了Velocity,則有名為error.vm的Velocity模板。

? 如果是用JSP視圖,則有名為error.jsp的JSP模板。

Spring Boot會為錯誤視圖提供如下錯誤屬性。

? timestamp:錯誤發生的時間。

? status:HTTP狀態碼。

? error:錯誤原因。

? exception:異常的類名。

? message:異常消息(如果這個錯誤是由異常引起的)。

? errors:BindingResult異常里的各種錯誤(如果這個錯誤是由異常引起的)。

? trace:異常跟蹤信息(如果這個錯誤是由異常引起的)。

? path:錯誤發生時請求的URL路徑。

默認日志logback配置

spring-boot-starter-logging
根據不同的日志系統,你可以按如下規則組織配置文件名,就能被正確加載:

Logback:logback-spring.xml, logback-spring.groovy, logback.xml

Log4j:log4j-spring.properties, log4j-spring.xml, log4j.properties, log4j.xml

Log4j2:log4j2-spring.xml, log4j2.xml

如果你不想用logback.xml作為Logback配置的名字,可以通過logging.config屬性指定自定義的名字:
logging.config=classpath:logging-config.xml

多環境日志輸出

據不同環境(prod:生產環境,test:測試環境,dev:開發環境)來定義不同的日志輸出,在 logback-spring.xml中使用 springProfile 節點來定義,方法如下:
文件名稱不是logback.xml,想使用spring擴展profile支持,要以logback-spring.xml命名



    



    

可以啟動服務的時候指定 profile (如不指定使用默認),如指定prod 的方式為:
java -jar xxx.jar –spring.profiles.active=prod

數據源與事務配置

1、使用普通jdbc


    org.springframework.boot
    spring-boot-starter-jdbc


    mysql
    mysql-connector-java

application.properties中配置數據源信息。

spring.datasource.url = jdbc:mysql://localhost:3306/spring?useUnicode=true&characterEncoding=utf-8
spring.datasource.username = root
spring.datasource.password = root
spring.datasource.driver-class-name = com.mysql.jdbc.Driver

自定義數據源


    com.alibaba
    druid
    1.0.19
@SpringBootApplication
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

    @Autowired
    private Environment env;

    //destroy-method="close"的作用是當數據庫連接不使用的時候,就把該連接重新放到數據池中,方便下次使用調用.
    @Bean(destroyMethod =  "close")
    public DataSource dataSource() {
        DruidDataSource dataSource = new DruidDataSource();
        dataSource.setUrl(env.getProperty("spring.datasource.url"));
        dataSource.setUsername(env.getProperty("spring.datasource.username"));//用戶名
        dataSource.setPassword(env.getProperty("spring.datasource.password"));//密碼
        dataSource.setDriverClassName(env.getProperty("spring.datasource.driver-class-name"));
        dataSource.setInitialSize(2);//初始化時建立物理連接的個數
        dataSource.setMaxActive(20);//最大連接池數量
        dataSource.setMinIdle(0);//最小連接池數量
        dataSource.setMaxWait(60000);//獲取連接時最大等待時間,單位毫秒。
        dataSource.setValidationQuery("SELECT 1");//用來檢測連接是否有效的sql
        dataSource.setTestOnBorrow(false);//申請連接時執行validationQuery檢測連接是否有效
        dataSource.setTestWhileIdle(true);//建議配置為true,不影響性能,并且保證安全性。
        dataSource.setPoolPreparedStatements(false);//是否緩存preparedStatement,也就是PSCache
        return dataSource;
    }
}
覆蓋Spring Boot 配置

Spring Boot自動配置自帶了很多配置類,每一個都能運用
在你的應用程序里。它們都使用了Spring 4.0的條件化配置,可以在運行時判斷這個配置是該被運
用,還是該被忽略。如:

@Bean
@ConditionalOnMissingBean(JdbcOperations.class)
public JdbcTemplate jdbcTemplate() {
return new JdbcTemplate(this.dataSource);
}

條件注解有如下:

@ConditionalOnBean 配置了某個特定Bean

@ConditionalOnMissingBean 沒有配置特定的Bean

@ConditionalOnClass Classpath里有指定的類

@ConditionalOnMissingClass Classpath里缺少指定的類

@ConditionalOnExpression 給定的Spring Expression Language(SpEL)表達式計算結果為true

@ConditionalOnJava Java的版本匹配特定值或者一個范圍值

@ConditionalOnJndi 參數中給定的JNDI位置必須存在一個,如果沒有給參數,則要有JNDI

InitialContext

@ConditionalOnProperty 指定的配置屬性要有一個明確的值

@ConditionalOnResource Classpath里有指定的資源

@ConditionalOnWebApplication 這是一個Web應用程序

@ConditionalOnNotWebApplication 這不是一個Web應用程序

單元測試
@RunWith(SpringRunner.class)
@SpringBootTest(classes = App.class)
public MyTest{
    @Test
    public void test1(){

    }
}
測試Web 應用程序

1、普通測試

@RunWith(SpringRunner.class)
@SpringBootTest(classes = App.class)
@WebAppConfiguration
public class MockMvcWebTests {
    @Autowired
    private WebApplicationContext webContext;
    private MockMvc mockMvc;
    @Before
    public void setupMockMvc() {
        mockMvc = MockMvcBuilders.webAppContextSetup(webContext).build();
    }
    @Test
    public void homePage() throws Exception {
        mockMvc.perform(MockMvcRequestBuilders.get("/readingList"))
                .andExpect(MockMvcResultMatchers.status().isOk())
                .andExpect(MockMvcResultMatchers.view().name("readingList"))
                .andExpect(MockMvcResultMatchers.model().attributeExists("books"))
                .andExpect(MockMvcResultMatchers.model().attribute("books",
            Matchers.is(Matchers.empty())));
    }
}

首先向/readingList發起一個GET請求,接下來希望該
請求處理成功(isOk()會判斷HTTP 200響應碼),并且視圖的邏輯名稱為readingList。測試
還要斷定模型包含一個名為books的屬性,該屬性是一個空集合。所有的斷言都很直觀。

2、測試運行中的應用程序
在測試類上添加@Web-IntegrationTest注解,可以聲明你不僅希望Spring Boot為測試創建應用程序上下文,還要啟動一個嵌入式的Servlet容器。一旦應用程序運行在嵌入式容器里,你就可以發起真實的HTTP請求,斷言結果了。
這里采用@WebIntegration-Test,在服務器里啟動了應用程序
, 以Spring的RestTemplate對應用程序發起HTTP請求。
Spring-boot 1.4以后推薦采用SpringBootTest(webEnvironment=WebEnvironment.DEFINED_PORT) (or RANDOM_PORT)來代替@WebIntegrationTest,而此類在1.5已經被移除了。https://github.com/spring-pro...

@RunWith(SpringRunner.class)
@SpringBootTest(classes = App.class,webEnvironment=WebEnvironment.RANDOM_PORT)
public class WebInRuntimeTest {
    @Value("${local.server.port}")
    private int port;
    @Autowired
    private TestRestTemplate template;
    @Test
    public void test1(){
//        Assert.state(true,"測試成功");
        System.out.println(port);
        ResponseEntity response=template.getForEntity("/test/111", String.class);
        System.out.println(response.getStatusCodeValue());
        System.out.println(response.getHeaders());
        
        System.out.println(response.getBody());
        Assert.hasText("111","true");
    }
}

用隨機端口啟動服務器,@WebIntegrationTest的value屬性接受一個String數組,數組中的每項都是鍵值對,形如name=value,用來設置測試中使用的屬性。要設置server.port,你可以這樣做:**@WebIntegrationTest("server.port:0") //使用0表示端口號隨機,也可以具體指定如8888這樣的固定端口.
或者直接這樣@WebIntegrationTest(randomPort=true)**

Spring Boot將local.server.port的值設置為了選中的端口。我們只需使用Spring的@Value注解將其注入即可:

@Value("${local.server.port}")
private int port;

3、使用Selenium 測試HTML 頁面

@RunWith(SpringRunner.class)
@SpringBootTest(classes = App.class)
@WebIntegrationTest(randomPort=true)
public class ServerWebTests {
    private static FirefoxDriver browser;
    @Value("${local.server.port}")
    private int port;
    @BeforeClass
    public static void openBrowser() {
        browser = new FirefoxDriver();
        browser.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
    }
    @Test
    public void addBookToEmptyList() {
        String baseUrl = "http://localhost:" + port;
        browser.get(baseUrl);
        assertEquals("You have no books in your book list",browser.findElementByTagName("div").getText());
        browser.findElementByName("title").sendKeys("BOOK TITLE");
        browser.findElementByTagName("form").submit();
        WebElement dl =
            browser.findElementByCssSelector("dt.bookHeadline");
        assertEquals("BOOK TITLE by BOOK AUTHOR (ISBN: 1234567890)",dl.getText());
    }
    @AfterClass
    public static void closeBrowser() {
        browser.quit();
    }
}
外部tomcat部署war配置

當我們不想使用內嵌tomcat部署時,我們也可以使用外部tomcat,并打包成war:
https://docs.spring.io/spring...

開發常用的熱部署方式匯總

Spring Loaded

spring-boot-devtools

IDE的JRebel插件

1、Spring Loaded 實現熱部署
Spring Loaded是一個用于在JVM運行時重新加載類文件更改的JVM代理,Spring Loaded允許你動態的新增/修改/刪除某個方法/字段/構造方法,同樣可以修改作用在類/方法/字段/構造方法上的注解.也可以新增/刪除/改變枚舉中的值。

spring-loaded是一個開源項目,項目地址:https://github.com/spring-pro...

Spring Loaded有兩種方式實現,分別是Maven引入依賴方式或者添加啟動參數方式


    org.springframework.boot
    spring-boot-maven-plugin
    
        
        org.springframework
        springloaded
        1.2.6.RELEASE
        
    

啟動:mvn spring-boot:run
注意:maven依賴的方式只適合spring-boot:run的啟動方式,右鍵那種方式不行。

出現如下配置表實配置成功:
[INFO] Attaching agents: [C:Userstengj.m2repositoryorgspringframeworkspringloaded1.2.6.R

添加啟動參數方式
這種方式是右鍵運行啟動類.首先先下載對應的springloaded-xxx.RELEASE.jar,可以去上面提到的官網獲取,在VM options中輸入-javaagent:< pathTo >/springloaded-{VERSION}.jar

上面2種方式隨便選擇一種即可,當系統通過 mvn spring-boot:run啟動或者 右鍵application debug啟動Java文件時,系統會監視classes文件,當有classes文件被改動時,系統會重新加載類文件,不用重啟啟動服務。
注:IDEA下需要重新編譯文件 Ctrl+Shift+F9或者編譯項目 Ctrl+F9

在 Spring Boot,模板引擎的頁面默認是開啟緩存,如果修改頁面內容,刷新頁面是無法獲取修改后的頁面內容,所以,如果我們不需要模板引擎的緩存,可以進行關閉。

spring.freemarker.cache=false
spring.thymeleaf.cache=false
spring.velocity.cache=false
spring.mustache.cache=false

不過還是有一些情況下需要重新啟動,不可用的情況如下:

1:對于一些第三方框架的注解的修改,不能自動加載,比如:spring mvc的@RequestMapping

2:application.properties的修改也不行

3:log4j的配置文件的修改不能即時生效

2、spring-boot-devtools 實現熱部署
spring-boot-devtools為應用提供一些開發時特性,包括默認值設置,自動重啟,livereload等。


    
        org.springframework.boot
        spring-boot-devtools
        true
    

將依賴關系標記為可選< optional >true< /optional>是一種最佳做法,可以防止使用項目將devtools傳遞性地應用于其他模塊。
在Spring Boot集成Thymeleaf時,spring.thymeleaf.cache屬性設置為false可以禁用模板引擎編譯的緩存結果。
現在,devtools會自動幫你做到這些,禁用所有模板的緩存,包括Thymeleaf, Freemarker, Groovy Templates, Velocity, Mustache等。

自動重啟的原理在于spring boot使用兩個classloader:不改變的類(如第三方jar)由base類加載器加載,正在開發的類由restart類加載器加載。應用重啟時,restart類加載器被扔掉重建,而base類加載器不變,這種方法意味著應用程序重新啟動通常比“冷啟動”快得多,因為base類加載器已經可用并已填充。

所以,當我們開啟devtools后,classpath中的文件變化會導致應用自動重啟。
當然不同的IDE效果不一樣,Eclipse中保存文件即可引起classpath更新(注:需要打開自動編譯),從而觸發重啟。而IDEA則需要自己手動CTRL+F9重新編譯一下(感覺IDEA這種更好,不然每修改一個地方就重啟,好蛋疼)

排除靜態資源文件
靜態資源文件在改變之后有時候沒必要觸發應用程序重啟,例如thymeleaf模板文件就可以實時編輯,默認情況下,更改/META-INF/maven, /META-INF/resources ,/resources ,/static ,/public 或/templates下的資源不會觸發重啟,而是觸發live reload(devtools內嵌了一個LiveReload server,當資源發生改變時,瀏覽器刷新,需要瀏覽器插件支持)。

可以使用spring.devtools.restart.exclude屬性配置,例如

spring.devtools.restart.exclude=static/**,public/**

如果想保留默認配置,同時增加新的配置,則可使用
spring.devtools.restart.additional-exclude屬性

觀察額外的路徑
如果你想觀察不在classpath中的路徑的文件變化并觸發重啟,則可以配置 spring.devtools.restart.additional-paths 屬性。

不在classpath內的path可以配置spring.devtools.restart.additionalpaths屬性來增加到監視中,同時配置spring.devtools.restart.exclude可以選擇這些path的變化是導致restart還是live reload。

關閉自動重啟
設置 spring.devtools.restart.enabled 屬性為false,可以關閉該特性。可以在application.properties中設置,也可以通過設置環境變量的方式。

public static void main(String[] args) {
    System.setProperty("spring.devtools.restart.enabled", "false");
    SpringApplication.run(MyApp.class, args);
}

使用一個觸發文件
若不想每次修改都觸發自動重啟,可以設置spring.devtools.restart.trigger-file指向某個文件,只有更改這個文件時才觸發自動重啟。

自定義自動重啟類加載器
默認時,IDE中打開的項目都會由restart加載器加載,jar文件由Base加載器加載,但是若你使用multi-module的項目,并且不是所有模塊都被導入到IDE中,此時會導致加載器不一致。這時你可以創建META-INF/spring-devtools.properties文件,并增加restart.exclude.XXX,restart.include.XXX來配置哪些jar被restart加載,哪些被base加載。如:

restart.include.companycommonlibs=/mycorp-common-[w-]+.jar
restart.include.projectcommon=/mycorp-myproj-[w-]+.jar

如果您不想在應用程序運行時啟動LiveReload服務器,則可以將spring.devtools.livereload.enabled屬性設置為false。
一次只能運行一個LiveReload服務器。開始應用程序之前,請確保沒有其他LiveReload服務器正在運行。
如果你的IDE啟動多個應用程序,則只有第一個應用程序將支持LiveReload。

3、JRebel插件方式 :略

數據庫遷移庫支持

Spring Boot為兩款流行的數據庫遷移庫提供了自動配置支持。
? Flyway(http://flywaydb.org)
? Liquibase(http://www.liquibase.org)

用Flyway定義數據庫遷移過程


org.flywayfb
flyway-core

Flyway是一個非常簡單的開源數據庫遷移庫,使用SQL來定義遷移腳本。它的理念是,每個
腳本都有一個版本號,Flyway會順序執行這些腳本,讓數據庫達到期望的狀態。它也會記錄已執
行的腳本狀態,不會重復執行。
,Flyway腳本就是SQL。讓其發揮作用的是其在Classpath里的位置和文件名。Flyway
腳本都遵循一個命名規范,V版本號__描述.sql,如V1__initdb.sql
Flyway腳本需要放在src/main/resources/db/migration里。
你還需要將spring.jpa.hibernate.ddl-auto設置為none,由此告知Hibernate不要創建
數據表。

原理:在應用程序部署并運行起來后,Spring Boot會檢測到Classpath里的Flyway,自動配置所需的
Bean。Flyway會依次查看/db/migration里的腳本,如果沒有執行過就運行這些腳本。每個腳本都
執行過后,向schema_version表里寫一條記錄。應用程序下次啟動時,Flyway會先看schema_version
里的記錄,跳過那些腳本。

用Liquibase定義數據庫遷移過程

相比Flyway的優點,數據庫無關性,腳本不是用sql寫,而是支持yaml,json,xml等格式。


org.liquibase
liquibase-core

具體介紹:略。

Actuator監控應用程序狀態

運行中的應用程序就像禮物盒。你可以刺探它,作出合理的推測,猜測它的運行情況。但如
何了解真實的情況呢?有沒有一種辦法能讓你深入應用程序內部一窺究竟,了解它的行為,檢查
它的健康狀況,甚至觸發一些操作來影響應用程序呢?
Spring Boot的Actuator。它提供了很多生產級的特性,比如監控和度
量Spring Boot應用程序。Actuator的這些特性可以通過眾多REST端點、遠程shell和JMX獲得。


org.springframework.boot
spring-boot-starter-actuator

1、Actuator的Web端點
端點可以分為三大類:配置端點、度量端點和其他端點

GET /autoconfig 提供了一份自動配置報告,記錄哪些自動配置條件通過了,哪些沒通過

GET /configprops 描述配置屬性(包含默認值)如何注入Bean

GET /beans 描述應用程序上下文里全部的Bean,以及它們的關系

GET /dump 獲取線程活動的快照

GET /env 獲取全部環境屬性

GET /env/{name} 根據名稱獲取特定的環境屬性值

GET /health 報告應用程序的健康指標,這些值由HealthIndicator的實現類提供

GET /info 獲取應用程序的定制信息,這些信息由info打頭的屬性提供

GET /mappings 描述全部的URI路徑,以及它們和控制器(包含Actuator端點)的映射關系

GET /metrics 報告各種應用程序度量信息,比如內存用量和HTTP請求計數

GET /metrics/{name} 報告指定名稱的應用程序度量值

POST /shutdown 關閉應用程序,要求endpoints.shutdown.enabled設置為true

GET /trace 提供基本的HTTP請求跟蹤信息(時間戳、HTTP頭等)

/beans端點產生的報告能告訴你Spring應用程序上下文里都有哪些Bean。
/autoconfig端點能告
訴你為什么會有這個Bean,或者為什么沒有這個Bean。
Spring Boot自動配置構建于Spring的條件化配置之上。它提供了眾多帶有
@Conditional注解的配置類,根據條件決定是否要自動配置這些Bean。/autoconfig端點提供了
一個報告,列出了計算過的所有條件,根據條件是否通過進行分組。

/env端點會生成應用程序可用的所有環境屬性的列表,無論這些屬性是否用到。這其中包括
環境變量、JVM屬性、命令行參數,以及applicaition.properties或application.yml文件提供的屬性。

/metrics端點提供了一些針對Web請求的基本計數器和計時器,但那些度量值缺少詳細信
息。知道所處理請求的更多信息是很有幫助的,尤其是在調試時,所以就有了/trace這個端點。
/trace端點能報告所有Web請求的詳細信息,包括請求方法、路徑、時間戳以及請求和響應的
頭信息

2、使用:CRaSH shell

3、通過JMX 監控應用程序

參考:

Book: Spring-Boot In Action
嘟嘟獨立博客
https://github.com/tengj/Spri...

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/70160.html

相關文章

  • SpringBoot學習筆記:Getting Started構建第一個Spring Boot工程

    摘要:本文參考官方文檔部分特定版本如版本官方文檔地址注本文基于構建話說在上已經有多顆星了,足見火爆程度簡介以下介紹引自創建獨立的應用程序直接嵌入,或無需部署文件提供自己的入門來簡化你的配置盡可能自動配置提供生產就緒功能,如指標,運行 本文參考 Spring Boot官方文檔 Part II. Getting Started部分特定版本如1.5.10.RELEASE版本官方文檔地址:https...

    Drummor 評論0 收藏0
  • Thymeleaf 3學習筆記

    摘要:目前最新版本作為官方推薦模板引擎,而且支持純瀏覽器展現模板表達式在脫離運行環境下不污染結構是時候了解一番了。當前數目,從開始。 Thymeleaf 目前最新版本3.0Thymeleaf作為Spring-Boot官方推薦模板引擎,而且支持純HTML瀏覽器展現(模板表達式在脫離運行環境下不污染html結構).是時候了解一番了。 安裝與初始化配置 與Spring集成 org.thyme...

    stonezhu 評論0 收藏0
  • SpringBoot 入門簡介

    摘要:這里使用的是數據庫啟動類上加上注解在啟動類中添加對包掃描掃描多個包下的可以有以下幾種方法掃描會自動加載相關配置,數據源就會自動注入到中,會自動注入到中,可以直接使用。有配置文件下的使用掃描多個包下的可以有以下幾種方法掃描 Spring-Boot 學習筆記 1 Spring-Boot 介紹 1.1 什么是Spring-Boot Spring-Boot是由Pivotal團隊提供的全新框架...

    chuyao 評論0 收藏0
  • spring-boot日志

    摘要:這篇文章是邊聽尚硅谷的課程邊記的筆記,也是為了之后方便查看,視頻鏈接精彩的故事小張負責一個大型系統的開發,為了監控系統的運行狀況,系統中包含大量的語句,為了更好地管理呢,小張決定寫一個日志框架對日志進行管理,他設想的日志框架應該包含以下幾個 這篇文章是邊聽尚硅谷的課程邊記的筆記,也是為了之后方便查看,視頻鏈接:https://www.bilibili.com/vide... 1. 精彩...

    nifhlheimr 評論0 收藏0
  • 近幾個月Github上最熱門的Java項目一覽

    摘要:今天逛了逛,順手精選出了一下近幾個月以來上最熱門的個項目。相關閱讀正式開源,幫助應用快速容器化未來可能會上熱門的項目地址介紹哈哈,皮一下很開心。這是我自己開源的一份文檔,目前仍在完善中,歡迎各位英雄好漢一起完善。 showImg(https://segmentfault.com/img/remote/1460000015766827?w=391&h=220);今天逛了逛Github,順...

    cyqian 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<