開場知識:java
spring 容器注入bean,時容器初始化的一些接口以及接口調用的時間前後順序:linux
1)BeanFactoryPostProcessorweb
容器初始化的回調方法redis
* BeanFactoryPostProcessor在spring容器初始化以後觸發,並且只會觸發一次spring
* 觸發的時機比BeanPostProcessor早sql
@Componentsegmentfault
public class MyBeanFactoryPostProcessor implements BeanFactoryPostProcessor {windows
public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory)瀏覽器
throws BeansException {springboot
System.out.println("=========BeanFactoryPostProcessor========"+ beanFactory.getBeanPostProcessorCount());
}
}
2)BeanDefinitionRegistryPostProcessor//動態的注入bean
例子:
這裏的例子是一次性注入10個person的bean,併爲這10個person的bean的name屬性賦值了
BeanDefinitionRegistryPostProcessor
能夠拿到ConfigurableListableBeanFactory和BeanDefinitionRegistry兩個對象
@Component
public class MyBeanDefinitionRegistryPostProcessor implements
BeanDefinitionRegistryPostProcessor {
public void postProcessBeanFactory(
ConfigurableListableBeanFactory beanFactory) throws BeansException {
}
public void postProcessBeanDefinitionRegistry(
BeanDefinitionRegistry registry) throws BeansException {
for(int i=1;i<=10;i++){
BeanDefinitionBuilder bdb=BeanDefinitionBuilder.rootBeanDefinition(Person.class);//這個是構造beanDefinition的
bdb.addPropertyValue("name", "admin"+i);
registry.registerBeanDefinition("person"+i, bdb.getBeanDefinition());
}
}
}
3)BeanPostProcessor
裏面有兩個方法:
postProcessBeforeInitialization(Object bean, String name)//在bean注入spring容器以前能夠寫一些邏輯
postProcessAfterInitialization(Object bean, String name)//在bean注入spring容器以後能夠寫一些邏輯
spring.aop.proxy-target-class=false
/**
**/
下面這個類是把application.properties文件中的屬性注入到了RedisProperties這個類中
@ConfigurationProperties(prefix=」redis」)
public class RedisProperties{
private String host;
private Integer port;
//對應的get/set方法
}
15.從其餘project中注入的bean如何引入到本project?
兩種方法:
1):本身編寫註解@EnableXXX 在這個註解中引入@Import(須要注入bean的.class)
而後在本project中,用到須要注入的地方的類上面加入@EnableXXX(1.中編寫的註解)
這樣就能夠把不在同一個project的bean注入到其餘prj裏了
2):在resources文件夾下新建META-INF/spring.factories
在spring.factories文件中寫入:
org.springframework.boot.autoconfigure.EnableAutoConfiguration=本身要注入的類的全稱
16.開發一個starter的步驟:
1):新建一個maven項目
2):須要一個配置類,配置類裏面須要裝配好,須要提供出去的類
3):
(1)使用@EnableXXX 配合@Import導入須要裝配的類
(2)或者META-INF/spring.factories 在org.springframework.boot.autoconfigure.EnableAutoConfiguration配置須要裝入的
類
17.spring boot的日誌
Spring boot默認的日誌級別是INFO,能夠經過logging.level.*=debug *能夠是包,也能夠是類,最上面的是root
日誌級別有TRace Debug,warn error,fatal,off(表示關閉日誌輸出)
日誌的文件輸出:logging.file=e:/temp/my.log
也能夠指定路徑:logging.path=e:/temp/logs 指定日誌輸出目錄,此時的日誌名字默認是spring.log
日誌文件輸出,文件大小10M以後就分割了
logging.pattern.console=
logging.file.console=
指定控制檯和文件輸出的格式
Logback 學習下logback.xml配置 log4j2.xml
Spring boot 默認支持logback 也就是說須要在classpath下放置logback.xml或者logback-spring.xml便可定製日誌的輸出
使用其餘的日誌組件步驟:
18.spring boot的監控和度量
Pom.xml文件中須要引入依賴:spring-boot-actuator
actuator是spring boot提供的對應用系統的自省和監控的集成功能
學習actuator資料:https://segmentfault.com/a/1190000004318360?_ea=568366
監控就是能夠在瀏覽器中查看一些beans等等,好比:http://localhost:8080/beans
瀏覽器最好安裝JSONView插件(火狐)
http://localhost:8080/env 查看spring boot中的一些配置
http://localhost:8080/mappings 查看spring boot以及系統中的一些映射(包括一些controller)
http://localhost:8080/autoconfig 經過autoconfig配置到spring boot中的一些類,查看自動配置的使用狀況
自定義實現健康狀態監測,實現HealthIndiacator接口,並歸入到spring容器的管理之中
CounterService 用來計數的服務,能夠直接使用
統計/user/home被訪問的次數
在瀏覽器中輸入:http://localhost:8080/metrics 查看user.home.request.count的屬性值就能夠知道這個url被訪問的次數
19.spring boot的測試
須要在測試類上加上註解:@RunWith(SpringRunner.class) @SpringBootTest
Spring boot 測試步驟:
直接在測試類上加以下兩個註解:
@RunWith(SpringRunner.class) @SpringBootTest
19.1 測試Dao的方法的步驟
19.2測試spring容器中是否有某個bean:
只在測試環境下注入某些bean的方法:(在測試環境下注入Runnable) 注意是@TestConfiguration,不能用@Configuration ,而且這個類只會在測試環境下有效,
19.3測試application.properties文件中的值的方法:
Spring boot中使用 Environment來獲取文件中的屬性值
在測試環境中,spring boot優先獲取test resources下的配置文件application.properties,若是test resources下沒有配置文件,那麼它就會去 main resources文件夾下找配置文件
兩種給配置加配置項的方法:
20.spring boot + mybatis環境搭建
<parent>
Spring-boot-starter-parent
</parent>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
<dependeccies>
<dependency>
Spring-boot-starter-web
</dependency>
<dependency>
Spring-boot-starter-jdbc
</dependency>
<dependency>
mybatis
</dependency>
<dependency>
Mybatis-spring-boot-starter
</dependency>
<dependency>
Mysql-connector-java
</dependency>
</dependencies>
編寫接口Mapper的時候須要在其上加入註解@Mapper
例如:
@Mapper
Public interface ProductMapper{
}
Mybatis 基於註解的方式:
其實這個Mapper上沒有相似@Component注入到spring容器中,但它確實已經存在spring容器中了,因此能夠經過ConfigurableApplicationContext.getBean(XXXMapper.class)獲取,獲取完以後就能夠直接用這個獲取的類調用接口中的增刪改查,往數據進行數據讀寫等操做了,因此spring boot 與mybatis集成很方便
21.spring boot 的打包:
使用插件:這個插件介紹的地址是:
http://www.mojohaus.org/appassembler/appassembler-maven-plugin/
咱們使用的是第一個:appassembler-assemble是指打包一個可執行的命令
須要在pom.xml文件中加入配置
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>appassembler-maven-plugin</artifactId>
<version>1.10<version>
<configuration>
</configuration>
.......
<plugin>
</plugins>
</build>
注意上面的<mainClass></mainClass>是配置啓動類,須要配置App.class那個的包名:
例如:<mainClass>com.zhangshitong.springboot.App</mainClass>
那麼如何進行打包呢:
若是是windows平臺,那麼cmd命令切換到工程名的文件夾下,而後執行:
mvn clean package appassembler:assembler
接着就能看見平臺進行打包,一段時間事後,在工程名的target文件夾下會生成打包生成的一些文件,那麼咱們的可執行文件就在bin文件夾下會生成.bat文件,而後在該目錄下執行就是部署了項目
Linux平臺下的運行,用windows平臺打好包以後傳到linux平臺,首先給目標文件賦予權限chmod +x
而後執行bin文件夾下的linux平臺下的執行文件./xxxx