首先提供幾個SpringBoot開發過程當中經常使用的網站:html
用於簡化Spring應用的初始搭建和開發過程。java
首先貼出簡單地pom.xml配置文件:mysql
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.blog</groupId> <artifactId>MyBlog</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>MyBlog</name> <description>個人博客項目</description> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.3.8.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <!-- 項目屬性 --> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> <mybatis.version>1.1.1</mybatis.version> <mysql.version>5.1.38</mysql.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>${mybatis.version}</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>${mysql.version}</version> <scope>runtime</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
好比:web
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>
解答:因爲父節點spring-boot-starter-parent包含了大量配置好的依賴管理,在本身項目添加這些依賴的時候不須要寫
詳細包含可見:
Spring Boot starter
簡單貼出一些,幫助本身記憶:
spring-boot-starter-web //對web開發的支持,包括內置的Tomcat和spring-webmvc
spring-boot-starter //Spring Boot starter的核心,包括自動配置的支持, logging 和 yml配置 spring-boot-starter-actuator //爲應用添加了管理特性 spring-boot-starter-aop //面向切面編程的支持,包括spring-aop和AspectJ spring-boot-starter-jdbc //jdbc數據庫的支持 spring-boot-starter-mail //對javax.mail的支持 spring-boot-starter-redis //對redis的支持,包括spring-redis spring-boot-starter-security //對spring-security的支持 spring-boot-starter-test //常見的測試依賴,包括JUnit, Hamcrest, Mockito 和 spring-test 模塊 spring-boot-starter-thymeleaf //對渲染模板引擎的支持
能夠考慮啓用熱部署spring
<dependency> <groupId>org.springframework</groupId> <artifactId>springloaded</artifactId> <version>1.2.5.RELEASE</version> </dependency>
啓動項目→修改文件→右擊修改的文件→從新編譯,或者打開IDE的自動編譯功能sql
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> </dependency>
啓動項目→修改文件→右擊修改的文件→從新編譯,或者打開IDE的自動編譯功能
原理:spring-boot-devtools 是一個爲開發者服務的一個模塊,其中最重要的功能就是自動應用代碼更改到最新的App上面去。原理是在發現代碼有更改以後,從新啓動應用,可是速度比手動中止後再啓動還要更快,更快指的不是節省出來的手工操做的時間。其深層原理是使用了兩個ClassLoader,一個Classloader加載那些不會改變的類(第三方Jar包),另外一個ClassLoader加載會更改的類,稱爲 restart ClassLoader,這樣在有代碼更改的時候,原來的restart ClassLoader 被丟棄,從新建立一個restart ClassLoader,因爲須要加載的類相比較少,因此實現了較快的重啓時間(5秒之內)。數據庫
在 spring boot 中,有兩種配置文件,一種是application.properties,另外一種是application.yml,兩種均可以配置spring boot 項目中的一些變量的定義,參數的設置等。下面來講說二者的區別。apache
假設咱們簡單地配置MySQL數據庫,application.properties以下所示:編程
spring.datasource.url=jdbc:mysql://localhost:3306/myblog?useUnicode=true&characterEncoding=utf8&useSSL=false spring.datasource.username=root spring.datasource.password=root
application.yml以下所示:
spring: datasource: url: jdbc:mysql://localhost:3306/myblog?useUnicode=true&characterEncoding=utf8&useSSL=false username: root password: root
能夠看出來,yml 文件在寫的時候層次感強,並且少寫了代碼。因此如今不少人都使用yml配置文件。
❗️使用.yml時,屬性名的值和冒號中間必須有空格。同時,yml屬性文件不支持@PropertySource
註解。
詳細可看:Spring Boot 屬性配置和使用
針對開發(development)環境的配置文件:
application-dev.yml
#Windows開發環境下的配置文件 server: port: 80 tomcat: maxThreads: 10 minSpareThreads: 3 accesslog: #注意這裏G:/home/myblog/log/server_log也能夠 directory: G:\home\myblog\log\server_log pattern: combined enabled: true
針對生產(production)環境下的配置文件:
application-prod.yml
#Centos生產環境下的配置文件 server: port: 80 tomcat: maxThreads: 10 minSpareThreads: 3 accesslog: directory: /home/myblog/log/server_log pattern: combined enabled: true
如何定義使用哪一種配置文件呢?
在主配置文件application.yml中配置以下:
spring: profiles: active: prod
**在定義配置文件時,可使用佔位符:
app.name=MyApp app.description=${app.name} is a Spring Boot application app.id=${random.int[1024,65536]}
優先級:
當前目錄子目錄的/config > 當前目錄 > classpath的/config包 > classpath的根目錄
即:越靠近的優先級越高
**指定配置文件
@PropertySource 和 SpringApplication.setDefaultProperties,好比:
SpringApplication application = new SpringApplication(Application.class); Map<String, Object> defaultMap = new HashMap<String, Object>(); defaultMap.put("name", "Isea-Blog"); //還能夠是Properties對象 application.setDefaultProperties(defaultMap); application.run(args);
**應用屬性
@Value(「${xxx}」)和@ConfigurationProperties
,好比:
配置文件:
my.name=Isea533 my.port=8080 my.servers[0]=dev.bar.com my.servers[1]=foo.bar.com
對應對象:
@ConfigurationProperties(prefix="my") public class Config { private String name; private Integer port; private List<String> servers = new ArrayList<String>(); public String geName(){ return this.name; } public Integer gePort(){ return this.port; } public List<String> getServers() { return this.servers; } }
Spring Boot 會自動將prefix="my"前綴爲my的屬性注入進來。固然若不指定前綴,則將名字對應的注入,可能衝突。
好比我在文件中配置了一個
massage: data: name: qibaoyi
我在類中想要獲取他 須要這樣去寫:
@Value("${message.data.name}") private String name;