spring boot學習筆記2

開場知識: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容器以後能夠寫一些邏輯

  1. spring boot aop開發流程:
  2. spring-boot-starter-aop 加入依賴,默認就開啓了AOP的支持
  3. 寫一個Aspect 封裝橫切關注點(日誌、監控等等),須要配置通知(前置通知,後置通知等等)和切入點(包的哪些類,哪些方法)
  4. 這個Aspect須要歸入spring容器中管理,並須要加入@Aspect註解
  5. spring.aop.auto配置項決定是否啓用AOP,默認啓用
  6. spring.aop.proxy-target-class=true 是啓用cglib的動態代理,若是是false 則是啓用jdk的動態代理,  jdk的動態代理是須要接口的,若是配置了false ,而類中沒有接口,則依然使用cglib
  7. 註解:@EnableAspectJAutoProxy 意思就是啓用aop,而且默認是啓用jdk的動態代理  就至關於在application.properties文件中配置了spring.aop.auto=true

spring.aop.proxy-target-class=false

 

  • 14.
  • @EnableConfigurationProperties註解的應用:

 

/**

  1. 由於咱們在裝配RedisAutoConfiguration這個類的時候,是會用到RedisProperties這個類的host,port的屬性值
  2. @ConditionalOnClass(Jedis.class) 這個註解的意思是,只有下面的Jedisredisjava實現類)存在時才進行bean的裝配
  3. @ConditionalOnMissingBean  這個註解是當被@bean標註的beanspring容器中不存在時,才注入到spring容器

**/

 

 

  下面這個類是把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中,用到須要注入的地方的類上面加入@EnableXXX1.中編寫的註解)

 

 

 這樣就能夠把不在同一個projectbean注入到其餘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便可定製日誌的輸出

 

使用其餘的日誌組件步驟:

  1. 排除掉默認的日誌組件spring-boot-logging
  2. 加入新的日誌組件依賴
  3. 把相應的配置文件放在classpath

  

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文件夾下找配置文件

 

兩種給配置加配置項的方法:

  1. @SpringBootTest註解中添加屬性properties
  2. 利用@Before  ConfigurableEnvironment.addEnvironment()

 

 

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

相關文章
相關標籤/搜索