1.自動配置:針對不少Spring應用程序常見的應用功能,SpringBoot能自動提供相關配置。java
在任何Spring應用程序的源代碼中,均可以找到java配置或XML配置,他們爲應用程序開啓了特定的特性和功能。mysql
2.起步依賴:告訴SpringBoot須要什麼功能,他就能引入須要的庫。web
SpringBoot起步依賴基本都以spring-boot-starter打頭,隨後是直接表明其功能的名字,好比web、test。redis
3.命令行界面:這是SpringBoot的可選特性,藉此你只需寫代碼就能完成完整的應用程序,無需傳統項目構建。spring
4.Actuator:讓你可以深刻運行中的SpringBoot應用程序,一探究竟。
Spring應用程序上下文裏配置的Bean
SpringBoot的自動配置作的決策
應用程序取到的環境變量、系統屬性、配置屬性和命令行參數
應用程序裏線程的當前狀態
應用程序最近處理過的HTTP請求的追蹤狀況
各類和內存用量、垃圾回收、Web請求以及數據源用量的相關指標sql
SpringBoot不是應用服務器bootstrap
SpringBoot能夠把Web應用程序變爲可自執行的JAR文件,不用部署到傳統Java應用服務器裏就能在命令行裏運行。SpringBoot在應用程序裏嵌入了一個Servlet容器(tomcat、Jetty或Undertow),以此實現這一功能。但這是內嵌的Servlet容器提供的功能,不是SpringBoot實現的。緩存
SpringBoot沒有引入任何形式的代碼生成,而是利用了Spring 4的條件化配置特性,以及Maven和Gradle提供的傳遞依賴解析,以此實現Spring應用程序上下文裏的自動配置。tomcat
Spring4.0對條件化配置提供了支持,根據應用程序的Classpath、環境和其餘因素,運行時決策將使用哪些配置,忽略哪些配置。服務器
從本質上來講SpringBoot就是Spring,它作了那些沒有它你本身也會作的Spring Bean配置。
File→newProject→SpringInitalizr
項目建立完成後,你會看到以下圖的項目結構
整個項目遵循傳統Maven或Gradle項目的佈局,即主要應用程序代碼位於src/main/java目錄裏,資源都在src/main/resource目錄裏,測試代碼則在src/test/java目錄裏。
ReadingListAppliaction.java : 應用程序的啓動類(bootstrap class),也是主要的Spring配置類。
Application.properties : 用於配置應用程序和SpringBoot的屬性。
RedingListApplicationTests.java : 一個基本的集成測試類。
1.啓動Spring
ReadingListApplication在SpringBoot應用程序裏有兩個做用:配置和啓動引導。首先,這是主要的Spring配置類。雖然SpringBoot的自動配置免除了不少Spring配置,但你還須要少許配置來啓用自動配置。
@SpringBootApplication開啓了Spring的組件掃描和SpringBoot的自動配置功能。實際上,@SpringBootApplicationj將三個有用的註解組合在了一塊兒。
)1.Spring的@Configuration:標明該類使用Spring的基於Java的配置。
)2.Spring的@ComponentScan:啓用組件掃描,這樣你寫的Web控制器和其餘組件才能被自動發現並註冊爲Spring應用上下文裏的Bean。
)3.SpringBoot的@EnableAutoConfiguration:開啓了SpringBoot的自動配置
要運行SpringBoot應用程序有幾種方式,其中包含傳統的war文件部署。但這裏的main()方法可讓你在命令行裏把該應用程序看成一個可執行的JAR文件來運行。這裏想SpringApplication.run()傳遞了一個ReadingListApplication類的引用,還有命令行參數,經過這些東西啓動應用程序。
應用程序跑起來以後,會啓動一個監聽8080端口的Tomcat服務器。能夠經過localhost:8080,但因爲尚未寫控制器類,你只會收到一個HTTP 404錯誤頁面。
2.測試SpringBoot應用
RedingListApplicationTest不止是個用於測試的佔位符,他仍是一個例子,告訴你如何爲SpringBoot應用程序編寫測試。
一個典型的Spring集成測試會用@ContextConfiguration註解標識如何加載Spring的應用程序上下文。可是,爲了充分發揮SpringBoot的魔力,這裏應該用@SpringApplication-Configuration註解。正如上圖,ReadingListApplicationTests使用@SpringApplicationConfiguration註解從ReadingListApplication配置類里加載Spring應用程序上下文。
ReadingListApplicationTest裏還有一個簡單的測試方法,即contextLoads()。實際上它是就是個空方法。但這個空方法足以證實應用程序上下文的加載沒有問題。若是ReadingListApplication裏定義的配置是好的,就能經過測試,若是有問題,測試就會失敗。
3.配置應用程序屬性
Initializr爲你生成的applicaiton.properties文件是一個空文件。實際上,這個文件徹底是可選的,能夠刪除,對程序運行沒有任何影響。
咱們如今能夠在裏面配置一些東西
server.port= 8000
加上這一行,嵌入式Tomcat的監聽端口就變成了8000。
這說明application.propeties文件能夠很方便的幫你細粒度地調整SpringBoot的自動配置,還能夠用它來指定應用程序代碼所需的配置項。
要注意的是,徹底不用告訴SpringBoot爲你加載application.propeties,只要它存在就會被加載,Spring和應用程序代碼都能獲取其中的屬性。
在pom文件中加入Mybatis相關依賴:
<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency>
在application.properties中加入:
spring.datasource.driver-class-name=com.mysql.jdbc.Driver spring.datasource.url=jdbc:mysql://127.0.0.1:3306/successful_said?useSSL=false&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&serverTimezone=Hongkong spring.datasource.data-username=root spring.datasource.data-password=root
在啓動類中加入:
@MapperScan("com.example.second.demosecond.dao")
在src/main/resource目錄下建立mapper文件(也可以使用註解開發),並在mapper文件中建立userMapper.xml,內容以下:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" > <mapper namespace="com.example.second.demosecond.dao.UserDao" > <resultMap id="BaseResultMap" type="com.example.second.demosecond.entity.User" > <id column="id" property="id" jdbcType="INTEGER" /> <result column="name" property="userName" jdbcType="VARCHAR" /> <result column="address" property="address" jdbcType="VARCHAR" /> </resultMap> <sql id="Base_Column_List" > id, name, address </sql> <select id="selectUser" resultMap="BaseResultMap"> select <include refid="Base_Column_List" /> from user </select> </mapper>
其中, mapper標籤的namespace屬性對應的是你的Dao,resultMap的type屬性對應的是你的JavaBean。
在你的啓動類的平級目錄下建立Entity,Dao,Controller,Service四個文件夾,並編寫相關代碼,以下。
)1.在Entity文件夾中建立JavaBean,編輯代碼以下:
public class User { private String UserName; private Integer id; private String address; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } public String getUserName() { return UserName; } public void setUserName(String userName) { UserName = userName; } }
)2.在Dao文件夾中建立Dao,代碼以下:
import java.util.List; @Mapper public interface UserDao { List<User> selectUser(); }
)3.在Controller文件中建立Controller,代碼以下:
import com.example.second.demosecond.dao.UserDao; import com.example.second.demosecond.entity.User; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.util.List; @RestController @EnableAutoConfiguration @RequestMapping(value = "/boot") public class BootController { @Autowired private UserDao userDao; @RequestMapping(value = "getUser") public User getUser() { User user=new User(); user.setUserName("test"); return user; } @RequestMapping(value = "getAllUser") public List<User> getUsers() { List<User> userList= userDao.selectUser(); return userList; } }
全部/webjars/**,都去classpath:/META-INF/resoures/webjars/找資源;
webjars:以jar包的方式引入靜態資源;
webjar的網站:https://www.webjars.org/
maven中央倉庫:https://mvnrepository.com/
頁面都放在resource/templates下
1.引入Redis的相關依賴
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-redis</artifactId> <version>1.3.8.RELEASE</version> </dependency>
2.在application.properties中配置Redis
application.properties中加入:
#Redis主機地址
spring.redis.host=
3.測試
我這裏使用Spring內置的RedisTemplate(也可使用jedis)
@Autowired StringRedisTemplate stringRedisTemplate; //操做字符串 @Autowired RedisTemplate redisTemplate; //key value
新增一個字符串類型的值
stringRedisTemplate.opsForValue().append("msg","hello");
讀取
stringRedisTemplate.opsForValue().get("msg");
新增一個List類型的值
stringRedisTemplate.opsForList().leftPush("list","xiaoming");
stringRedisTemplate.opsForList().leftPush("list","xiaohong");
存入對象類型的數據
User user=userDao.findUserById(1);
redisTemplate.opsForValue().set("emp01",user);
存入後可以使用RedisDesktopManager這款工具來查看。
你會發現,存入的數據爲序列化後的(亂碼),雖然不會影響正常的查詢,下面我的提供兩種解決方式:
默認若是保存對象,使用JDK序列化機制,序列化後的數據保存到Redis中。
將數據以JSON的方式保存
1)本身將對象轉換成JSON
2)改變默認的序列化規則方式
1.建立一個類
@Configuration public class MyRedisConfig{ @Bean public RedisTemplate(Object,User)UserRedisTemplate(RedisConnectionFacation redisConntionFacation) throws UnknownHostException{ RedisTemplate<Object,User> template = new RedisTemplate(); templcate.setConnectionFactory(redisConnectionFacatiory); Jackson2JsonRedisSerializer<User> userJackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<User>(User.class); template.setDefaultSerializer(userJackson2JsonRedisSerializer); return template; } }
2.使用@Autowired註解將方法自動裝配到controoler裏
@Autowired
RedisTemplate<Object, User> UserRedisTemplate;
3.測試使用
UserRedisTemplate.opsForValue().set("emp02",user);
1.測試異步任務(在啓動方法裏還要 加上 @EnableAsync 註解 纔可生效)
@Async public void async(){ try { Thread.sleep(3000); }catch (InterruptedException e){ e.printStackTrace(); } System.out.print("處理數據中..."); }
2.測試定時任務(在啓動類裏要加上 @EnableScheduling註解纔可生效)
@Scheduled(cron = "0,1,2,3,4 * * * * MON-SAT") public void scheduled(){ System.out.print("定時發送..."); }
3.郵件任務
1)郵件發送須要引入 spring-boot-starter-mail
2)在appilcation.properties中配置郵箱
spring.mail.username=1242919235@qq.com #pssword本身去郵箱裏查看 spring.mail.password= spring.mail.host=smtp.qq.com #若是發送不出去(530)需使用如下配置 #spring.mail.properties.mail.smtp.ssl.enable=true
3)測試
@Autowired JavaMailSenderImpl javaMailSender; @Test public void email(){ SimpleMailMessage message =new SimpleMailMessage(); //郵件標題 message.setSubject("今晚開會"); //郵件內容 message.setText("今晚7:30開會"); //發給誰 message.setTo("xfy19990101@163.com"); //誰發的 message.setFrom("1242919235@qq.com"); javaMailSender.send(message); }
引入lombok依賴
<dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.4</version> </dependency>
lombok的一些註解
@NonNull : 註解在參數上, 若是該類參數爲 null , 就會報出異常, throw new NullPointException(參數名) @Cleanup : 註釋在引用變量前, 自動回收資源 默認調用 close() 方法 @Getter/@Setter : 註解在類上, 爲類提供讀寫屬性 @Getter(lazy=true) : @ToString : 註解在類上, 爲類提供 toString() 方法 @EqualsAndHashCode : 註解在類上, 爲類提供 equals() 和 hashCode() 方法 @NoArgsConstructor, @RequiredArgsConstructor, @AllArgsConstructor : 註解在類上, 爲類提供無參,有指定必須參數, 全參構造函數 @Data : 註解在類上, 爲類提供讀寫屬性, 此外還提供了 equals()、hashCode()、toString() 方法 @Value : @Builder : 註解在類上, 爲類提供一個內部的 Builder @SneakThrows : @Synchronized : 註解在方法上, 爲方法提供同步鎖 @Log : @Log4j : 註解在類上, 爲類提供一個屬性名爲 log 的 log4j 的日誌對象 @Slf4j : 註解在類上, 爲類提供一個屬性名爲 log 的 log4j 的日誌對象 @AllArgsConstructor 生成一個無參構造 @NoArgdConstuctor 生成一個無參構造
咱們使用@Data註解就能夠有如下註解的功能:
@ToString
@Getter
@Setter
@EqualsAnHashCode
@NoArgsConstructor
須要注意的是,同時使用@Data和@AllArgsConstructor後,默認的無藏構造函數失效,若是須要它,要須要設置@noArgsConstructor
1.application.properites 中配置
2.添加WebMvcConfig工具類
3.建立文件夾
這樣在不肯定項目部署在什麼平臺下時,有兩種選擇方案,平臺改變,只需修改配置文件便可。
1.打成Jar
使用nohup java -jar text.jar > log.txt &命令啓動工程
log.txt : 用來存儲日誌,自動建立。
& : 後臺運行。
java -jar : 系統環境變量配置的jre。
nohup : 不掛斷地運行命令,通常結合&使用。
2.打成war(不推薦)
1)修改pom文件
<packaging>war</packaging>
2)將SpringBoot默認的tomcat設置爲provided
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> <scope>provided</scope> </dependency>
3)Application啓動類繼承SpringBootServletInitializer
4)claen package
5)copy生成的war到tomcat的wabapps下,運行tomcat
注:tomcat的版本必須是8及以上