摘要:這里使用的是數據庫啟動類上加上注解在啟動類中添加對包掃描掃描多個包下的可以有以下幾種方法掃描會自動加載相關配置,數據源就會自動注入到中,會自動注入到中,可以直接使用。有配置文件下的使用掃描多個包下的可以有以下幾種方法掃描
Spring-Boot 學習筆記 1 Spring-Boot 介紹 1.1 什么是Spring-Boot
Spring-Boot是由Pivotal團隊提供的全新框架,其設計目的是用來簡化新Spring應用的初始搭建以及開發(fā)過程。個人理解來說Spring-Boot其實不是什么新的框架,它默認配置了很多框架的使用方式,就像maven整合了所有的jar包,Spring-Boot整合了其他相關聯(lián)框架。
Spring-Boot 基于Spring框架,而Spring-Cloud基于Spring-Boot,為微服務體系開發(fā)中的架構問題,提供了一整套的解決方案——服務注冊與發(fā)現,服務消費,服務保護與熔斷,網關,分布式調用追蹤,分布式配置管理等。
Spring-Boot 四大特性:自動配置、起步依賴、Actuator、命令行界面(CLI)
1.2 為什么要使用Spring-Boot區(qū)別于Spring-Boot以前的Spring和其他框架的整合例如Mybatis,Shiro等都需要配置文件,項目中的配置文件越來越多,也越來越繁瑣。項目中常常因為配置文件出錯的原因,導致項目運行出錯。
而Spring-Boot可以說就是為了解決繁雜配置而出現的解決方案。Spring-Boot理念可以理解為:約定大于配置。快速整合第三方框架,減少甚至不需要配置文件,解決了以往的Spring框架下的弊端。
因為配置文件少了,代碼變少了,第三方框架帶來的煩惱變少了,對于一個開發(fā)團隊來說,更加利于開發(fā),后期維護也更加簡單。
要使用Spring-Cloud前應該掌握Spring-Boot
1.2.1 Spring-Boot 自動配置傳統(tǒng)的Spring web項目配置需要經過以下步驟:
1)配置web.xml,加載Spring和Spring MVC
2)配置數據庫連接、配置Spring事務
3)配置加載配置文件的讀取,開啟注解
4)配置日志文件
…
配置完成之后部署tomcat 調試
…
但是針對一些單一業(yè)務需求的項目,例如該項目只是實現一個郵件收發(fā),表格導出等單一功能,配置步驟便顯得麻煩。
Spring-Boot的自動配置則能夠簡化很多配置,減少傳統(tǒng)開發(fā)步驟,直接開展項目。
1.2.2 Spring-Boot 起步依賴Spring-Boot啟動時回去導入spring-boot-autoconfigure包下META-INF/spring.factories配置文件
根據XxxxAutoConfiguration配置類的條件注解@Conditional判斷當前環(huán)境中是否滿足XxxxAutoConfiguration的注解條件,如果滿足,則自動向Spring IOC 容器中注入bean
1.2.3 Spring-Boot ActuatorSpring-Boot為了改善傳統(tǒng)Spring應用繁雜的配置內容,采用了包掃描和自動化配置的機制,加載了原來在xml文件中的內容。自動配置有利有弊,有利的地方是讓代碼看上去更加簡潔,反面則造成了分析應用中資源和實例的各種關系變得困難(實例創(chuàng)建和依賴關系等信息都被離散到了各個配置類的注解上)
應用配置類:獲取應用程序中加載的應用配置、環(huán)境變量、自動化配置報告等與Spring-Boot應用密切相關的配置類信息。 度量指標類:獲取應用程序運行過程中用于監(jiān)控的度量指標,比如:內存信息、線程池信息、HTTP請求統(tǒng)計等。 操作控制類:提供了對應用的關閉等操作類功能。
Actuator這類端點的出現意義就是為了幫助我們輕松的獲取一系列關于Spring 應用配置內容的詳細報告,比如:自動化配置的報告、Bean創(chuàng)建的報告、環(huán)境屬性的報告等。
Actuator提供了以下監(jiān)控方式
Actuator 提供了 13 個接口,具體如下表所示
通過在配置文件中加入 management.security.enabled=false
例如:
Spring-Boot CLI是一個命令行工具,可用于快速搭建基于Spring的原型。它支持運行Groovy腳本,這也就意味著你可以使用類似Java的語法,但不用寫很多的模板代碼。
首先下載Spring-Boot CLI
https://docs.spring.io/spring...
配置環(huán)境變量
在PATH 中配置Spring-Boot CLI文件夾下bin的路徑:
D:spring-boot-cli-1.5.9.RELEASE-binspring-1.5.9.RELEASEbin
打開CMD查看是否安裝成功
輸入 spring --version (注意是--)
使用命令初始化項目
spring init --build=maven --java-version=1.8 --dependencies=web --packaging=jar --boot-version=1.5.9.RELEASE --groupId=com.example.demo --artifactId=javen
--build:表示項目構建工具maven,也可以選擇gradle --java-version:表示JDK版本 --dependencies=web:表示依賴web插件 --packaging:表示打包程序方式 --boot-version:選擇 spring boot的版本 --groupId:maven的groupId --artifactId:maven的artifactId
將生成的javan.zip導入eclipse(STS)中即可
1.3 更簡潔的報錯信息
Spring-Boot相比于以前的控制臺報錯信息,更加人性化和簡潔。
默認情況下,Spring-Boot 1.3.0 Build-snapshot 需要Java 7 以及Spring框架 4.1.3或以上,如果在Java 6下使用Spring-Boot,需要添加額外的配置。
雖然可以在Java 6 和 java 7下使用Spring-Boot,但是官方建議在Java 8下使用Spring-Boot
構建環(huán)境明確支持有Maven(3.2+)和Gradle(1.12+)。
2.1 Spring-Boot 內嵌servlet 容器Spring-Boot內嵌容器支持開箱即用(out of the box)
也可以使用Spring-Boot應用部署到任何兼容Servlet 3.0+的容器。
3 創(chuàng)建 Spring-Boot 項目 3.1 三種創(chuàng)建Spring-Boot項目的方式:1) 在Spring官網 http://start.spring.io/
進行項目名稱等設置并選擇版本、依賴。然后會下載這個項目的壓縮文件,解壓后,使用 eclipse,Import -> Existing Maven Projects -> Next ->選擇解壓后的文件夾-> Finsh 成功導入該項目
2) 使用Spring-Boot 插件,在eclipse中new一個 Spring starter project,并選擇需要的依賴。(第一次構建會很慢)
3) 用maven構建項目
上面 1)、2)的構建方式中生成的pom.xml文件中默認有兩個模塊:
spring-boot-starter :核心模塊,包括自動配置支持、日志和yml;
org.springframework.boot spring-boot-starter-parent 1.5.9.RELEASE
spring-boot-starter-test :測試模塊,包括JUnit、Hamcrest、Mockito。
3.2 Spring-Boot熱部署:org.springframework.boot spring-boot-starter-test test
只用在pom.xml里面依賴devtools即可
3.2.1 Spring-Boot熱部署重新編譯類文件org.springframework.boot spring-boot-devtools true
熱部署指的是:當我們修改了一個java類的時候,我們只需要重新編譯一下,Spring-Boot的就會重啟了。因為devtools會監(jiān)聽classpath下的文件變動,所以當java類重新編譯的時候,devtools會監(jiān)聽到這個變化,然后就會重新啟動Spring-Boot。這個重啟是非常快的一個過程。因為在Spring-Boot中有兩個類加載器,一個是加載工程外部資源的,如jar包,還有一個類加載器是用來加載本工程的class的。所以在重啟Spring-Boot的時候只加載本工程的class文件。
3.2.2 Spring-Boot熱部署監(jiān)聽文件夾的變化如果你不想重新編譯java類的話,還有一種方式用來讓Spring-Boot重啟,那就是讓devtools監(jiān)聽文件夾的變化:比如我們想讓com.example.springboot這個文件夾下的文件改變的時候,重新啟動Spring-Boot,那么我們只要在application.properties中添加這樣一句話就行了:spring.devtools.restart.additional-paths=comexamplespringboot
3.2.3 Spring-Boot熱部署頁面熱部署devtools可以實現頁面熱部署,即頁面修改后會立即生效。你可以在application.properties文件中配置spring.thymeleaf.cache=false來實現這個功能。
3.3 Spring-Boot Maven插件: 3.3.1 Spring-Boot maven插件作用:Spring-Boot的Maven插件(spring-boot-maven-plugin)能夠以Maven的方式為應用提供Spring-Boot的支持,即為Spring-Boot應用提供了執(zhí)行Maven操作的可能。
spring-boot-maven-plugin能夠將Spring-Boot應用打包為可執(zhí)行的jar或war文件,然后以通常的方式運行Spring Boot應用。
3.3.2 Spring-Boot Maven plugin的5個Goals:org.springframework.boot spring-boot-maven-plugin true
spring-boot: repackage,默認goal。在mvn package之后,再次打包可執(zhí)行的jar/war,同時保留mvn package生成的jar/war為.origin
spring-boot: run,運行Spring-Boot應用
spring-boot: start,在mvn integration-test階段,進行Spring-Boot應用生命周期的管理
spring-boot: stop,在mvn integration-test階段,進行Spring-Boot應用生命周期的管理
spring-boot: build-info,生成Actuator使用的構建信息文件build-info.properties
3.4 application.properties和application.ymlyml: Spring-Boot會加載的配置文件(和properties功能一致,只是文件編輯的格式不同)
除此之外: application.properties 配置中文值的時候,讀取出來的屬性值會出現亂碼問題。但是 application.yml 不會出現亂碼問題。原因是,Spring-Boot 是以 iso-8859 的編碼方式讀取 application.properties 配置文件。
以下是 .properties和 .yml格式對比
Spring-Data JPA數據源配置
spring.datasource.url=jdbc:mysql://localhost:3306/yourDB spring.datasource.username=root spring.datasource.password=root spring.datasource.driver-class-name=com.mysql.jdbc.Driver spring.jpa.properties.hibernate.hbm2ddl.auto=update spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect spring.jpa.show-sql=true spring.thymeleaf.cache=false3.4.2 application.yml :
Spring-Data JPA數據源配置
spring: datasource: url: jdbc:mysql://localhost:3306/yourDB username: root password: root driver-class-name: com.mysql.jdbc.Driver jpa: properties.hibernate.hbm2ddl.auto: update properties.hibernate.dialect: org.hibernate.dialect.MySQL5InnoDBDialect show-sql: true thymeleaf: cache: false
yml的格式特點:縮進式,"="號使用":"替代,":"之后要使用空格。
yml比properties更能清晰體現結構以及內容,類似eclipse里面的包路徑展示方式
Spring-Boot由于內嵌入了Tomcat,在jar項目下,直接開啟Application.class就能直接加載配置并開啟Tomcat。
@PropertySource 掃描指定路徑下的properties
@SpringBootApplication @PropertySource("classpath:prop/application.properties") public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } }3.6 jasypt-Spring-Boot 配置文件加密
在配置文件.properties或.yml中,數據庫連接的賬號密碼不應該直接暴露。而Spring-Boot與jasypt的整合包可以對我們的配置文件的賬號密碼進行加密。
@EnableEncryptableProperties @RunWith(SpringRunner.class) @SpringBootTest(classes=Deserializers.Base.class) //@SpringBootTest public class JaysptTest { @Autowired private StringEncryptor stringEncryptor;//密碼解碼器注入 @Test public void test() { System.out.println("生成加密后的數據庫用戶名:"+stringEncryptor.encrypt("root")); System.out.println("生成加密后的數據庫密碼:"+stringEncryptor.encrypt("root")); } }
得到加密后的信息:
生成加密后的數據庫用戶名:5KtXuBsNjeQtOuUOR8PPMg== 生成加密后的數據庫密碼:Y/SEuMVPbIqgimIKqnxFrg==
在配置文件中修改:
jasypt.encryptor.password:可以理解為加鹽
默認情況下jasypt采用的算法是PBEWithMD5AndDES,該算法對同一串明文每次加密的密文都不一樣,比較適合做數據加解密。但是該算法必須配置密碼,我們在yml文件配置如下參數
jasypt: encryptor: password: 123456
加密后的字符串需要放進ENC()里面
spring: datasource: url: jdbc:mysql://localhost:3306/sbjpa?useUnicode=true&characterEncoding=UTF-8 username: ENC(5KtXuBsNjeQtOuUOR8PPMg==) password: ENC(Y/SEuMVPbIqgimIKqnxFrg==) driver-class-name: com.mysql.jdbc.Driver4 使用Spring-Boot Web項目綜合開發(fā) 4.1 Spring-Boot 在Controller下的特別注解
@RestController 的意思就是controller里面的方法都以json格式輸出,不用再進行jackjson、fastjson的配置。
@RestController public class UsersController { @RequestMapping("/users") public MapgetUsers() { Map map = new HashMap<>(); Users users = new Users(); users.setUid(001); users.setUserName("administrator"); users.setUserSex("simpleBoy"); users.setUserAge(16); map.put("users", users); return map; } }
輸出結果為json對象:
4.2 Spring-Boot下使用Mybatis相比以往復雜的配置,Spring-Boot的配置相當簡單:
添加相關依賴
4.2.1 無配置文件版使用Mybatisorg.mybatis.spring.boot mybatis-spring-boot-starter 1.3.1
只用添加相關依賴和application.yml并配合注解即可
相關的主要依賴(web、mybatis-spring-boot、mysql-connector)
org.springframework.boot spring-boot-starter org.springframework.boot spring-boot-starter-test test org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-thymeleaf org.mybatis.spring.boot mybatis-spring-boot-starter 1.3.1 <-- 這里使用的是MySQL數據庫--!> org.springframework.boot spring-boot-starter-actuator mysql mysql-connector-java org.springframework.boot spring-boot-devtools true
application.yml
mybatis: type-aliases-package: com.example.demo.po spring: datasource: url: jdbc:mysql://localhost:3306/sbjpa username: root password: root driverClassName: com.mysql.jdbc.Driver
Application.java啟動類上加上注解
在啟動類中添加對mapper包掃描@MapperScan
@MapperScan("com.example.*.dao")掃描多個包下的mapper,可以有以下幾種方法掃描
1. @MapperScan("com.example.*.dao") 2. @MapperScan("com.example.test1.dao,com.example.test2.dao")
@SpringBootApplication @MapperScan("com.example.*.dao") public class SpringBootMybatisApplication { public static void main(String[] args) { SpringApplication.run(SpringBootMybatisApplication.class, args); } }
Spring-Boot會自動加載spring.datasource.*相關配置,數據源就會自動注入到sqlSessionFactory中,sqlSessionFactory會自動注入到Mapper中,可以直接使用。要么在其他Mapper類上加@Mapper注解,前者更加方便。
public interface UsersMapper { @Select("select * from users") @Results({ @Result(property = "userName", column = "user_name"), @Result(property = "userSex", column = "user_sex"), @Result(property = "userAge", column = "user_age") }) public List4.2.2 有配置文件XML下的Mybatis使用getAll(); @Insert("insert into users(user_name,user_sex,user_age) values(#{usersName},#{userSex},#{userAge})") public void insert(Users users); @Update("update users set user_name=#{usersName},user_sex=#{userSex},user_age=#{userAge}") public void update(Users users); @Delete("delete from users where uid=#{uid}") public void delete(Integer uid); }
@MapperScan("com.example.*.dao")掃描多個包下的mapper,可以有以下幾種方法掃描
1. @MapperScan("com.example.*.dao") 2. @MapperScan("com.example.test1.dao,com.example.test2.dao")
@SpringBootApplication @MapperScan("com.example.*.dao") public class SpringBootMybatisApplication { public static void main(String[] args) { SpringApplication.run(SpringBootMybatisApplication.class, args); } }
1.application.properties
mybatis.mapper-locations=classpath:mybatis/mapper/*.xml mybatis.type-aliases-package=com.example.*.po spring.datasource.driverClassName = com.mysql.jdbc.Driver spring.datasource.url = jdbc:mysql://localhost:3306/sbmybatis?useUnicode=true&characterEncoding=utf-8 spring.datasource.username = root spring.datasource.password =
2.UserMapper.xml
id, userName, passWord, user_sex, nick_name and userName = #{userName} and user_sex = #{userSex} INSERT INTO users (userName,passWord,user_sex) VALUES (#{userName}, #{passWord}, #{userSex}) UPDATE users SET userName = #{userName}, passWord = #{passWord}, nick_name = #{nickName} WHERE id = #{id}DELETE FROM users WHERE id =#{id}
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/77322.html
摘要:本文要來分享給大家程序員最常用的日志框架組件。沒有基礎的同學也不要著急,這套教程覆蓋了目前所有的日志框架,只要你學,就一定用得到,先收藏,以備不時之需。 作為一名Java程序員,我們開發(fā)了很多Java應用程序,包括桌面應用、WEB應用以及移動應用。然而日志系統(tǒng)是一個成熟Java應用所必不可少的。在開發(fā)和調試階段,日志可以幫...
摘要:基礎入門篇簡介可以基于輕松創(chuàng)建可以運行的獨立的生產級的應用程序。對平臺和第三方類庫我們有自己看法和意見約定大于配置。官網目前最新版本是我們接下來就在這個版本的基礎上面進行學習。變成項目引入依賴。 SpringBoot基礎入門篇 簡介 Spring Boot可以基于Spring輕松創(chuàng)建可以運行的、獨立的、生產級的應用程序。 對Spring平臺和第三方類庫我們有自己看法和意見(約定大于配置...
摘要:相比,更簡單快捷。采用的是二進制協(xié)議,因為采用的是二進制協(xié)議,所以它很適合于發(fā)送二進制數據。創(chuàng)建接口創(chuàng)建實現類類端在這個包下服務端包類將服務端的代碼打包安裝到本地倉庫,打開瀏覽器輸入即可。 前言 看了其他的文章發(fā)現,大多數都是只寫了關鍵的部分,對于一個初學者來說只能明白用了什么東西,但實際動手發(fā)現,項目還存在一些問題,通過本篇文章,可以避免一些問題,節(jié)省一些時間成本。 Hessian簡...
摘要:哪吒社區(qū)技能樹打卡打卡貼函數式接口簡介領域優(yōu)質創(chuàng)作者哪吒公眾號作者架構師奮斗者掃描主頁左側二維碼,加入群聊,一起學習一起進步歡迎點贊收藏留言前情提要無意間聽到領導們的談話,現在公司的現狀是碼農太多,但能獨立帶隊的人太少,簡而言之,不缺干 ? 哪吒社區(qū)Java技能樹打卡?【打卡貼 day2...
閱讀 645·2021-08-17 10:15
閱讀 1742·2021-07-30 14:57
閱讀 1980·2019-08-30 15:55
閱讀 2823·2019-08-30 15:55
閱讀 2712·2019-08-30 15:44
閱讀 676·2019-08-30 14:13
閱讀 2389·2019-08-30 13:55
閱讀 2595·2019-08-26 13:56