2019-08-11spring boot 實踐

1.啟動類必須在controller的包上面摩渺,否則會出現(xiàn)無法找到“/”路徑的錯誤街佑。

2.@Controller和@RestController的區(qū)別
(1)@Controller需要返回html和jsp頁面戈泼,如果我們在Controller方法中需要返回JSON陨献、XML或者我們自己定義的類型到頁面中,那么就需要使用@ResponseBody注解該方法檐什。
(2)@ResponseBody牵祟,返回的是JSON倍靡、XML或其他文本。因此用@RestController注解相當于@Controller注解的類里面的每個方法都加上了@ResponseBody注解课舍。

3.@RestController里面的方法返回的文本一般通過ajax請求就可以獲取到了。

4.配置文件一般寫在Application.property中他挎,通過使用的話筝尾,在類中的變量直接使用類似@Value("${com.ken.number}")注入值即可。

5.在Spring Boot中多環(huán)境配置文件名需要滿足application-{profile}.properties的格式办桨,其中{profile}對應你的環(huán)境標識筹淫,比如:
application-dev.properties:開發(fā)環(huán)境
application-test.properties:測試環(huán)境
application-prod.properties:生產(chǎn)環(huán)境
至于哪個具體的配置文件會被加載,需要在application.properties文件中通過spring.profiles.active屬性來設置呢撞,其值對應{profile}值损姜。

6.Spring Boot的工程結構
(1)root package結構:com.example.myproject
(2)應用主類 Applicationi.java置于root package下,通常我們會在應用主類中做一些框架配置掃描等操作殊霞,我們放在root package下摧阅,可以幫助程序減少手工配置來加載到我們希望被Spring加載的內(nèi)容。
(3)實體(Entity)與數(shù)據(jù)訪問層(Repository)置于com.example.myproject.domain包下
(4)邏輯層(Service)置于com.example.myproject.service包下
(5)Web層(Web)置于com.example.myproject.web包下

com
  +- example
    +- myproject
      +- Application.java
      |
      +- domain
      |  +- Customer.java
      |  +- CustomerRepository.java
      |
      +- service
      |  +- CustomerService.java
      |
      +- web
      |  +- CustomerController.java
      |

(6)resources目錄結構
1.static:保存所有的靜態(tài)資源绷蹲,如js css images
2.templates:保存所有的模板頁面(Spring Boot默認使用嵌入式的Tomcat棒卷,默認不支持JSP頁面),可以使用模板引擎(freemarker祝钢、thymeleaf)
3.application.properties:Spring Boot應用的配置文件比规,可以修改默認配置。

7.spring JPA reopository @Query查詢的是類名拦英,是需要大寫的蜒什,而不是表名,小寫開頭
···
public interface StudentRepository extends CrudRepository<Student, Long>{
Student findByName(String name);
Student findByNameAndId(String name, Integer id);
//這里的Student是類要用大寫疤估,不是數(shù)據(jù)庫表的小寫開頭的student
@Query("from Student u where u.name=:name")
Student findStudent(@Param("name") String name);

}
···
8.但是在如果使用的是JdbcTemplate查詢語句里面的是小寫的表名灾常,而不是類名

@Component
public class StudentServiceImpl implements StudentService{

    @Autowired
    private JdbcTemplate jdbcTemplate;
    @Override
    public void create(String name,int id) {
        jdbcTemplate.update("insert into student(name,id) values(?,?)",name,id);
    }

    @Override
    public void deleteByName(String name) {
        jdbcTemplate.update("delete from student where name = ?",name);
    }

    @Override
    public Integer getUserCount() {
        Integer count =  (Integer) jdbcTemplate.queryForObject("select count(1) from student", Integer.class); 
        return count;
    }

    @Override
    public void deleteAllUsers() {
        jdbcTemplate.update("delete from student");
    }

9.spring-boot-starter-parent主要是管理spring應用的默認依賴。
10.@SpringbootApplication 注解的是啟動類
在這個注解里面有@AutoConfiguration配置注解做裙,啟用自動配置
@AutoConfiguration里面有@AutoConfigurationPackage,這個注解的左右時將主配置類(@SpringBootApplication標注的類)的所在包以及所有子包里面的所有組件掃描到spring容器里面岗憋。

11.@EnableAutoConfiguration:開啟自動配置功能
--| @AutoConfigurationPackage 自動配置包
--|@Import(AutoConfigurationPackages.Registrar.class) 控制導入的組件(取到主配置類
@SpringBootApplication注解的類的包名,掃描該包以及下級包的所有組件到Spring容器中)

--|@import(EnableAutoConfigurationImportSelector.class) EnableAutoConfigurationImportSelector:導入哪些組件的選擇器锚贱,將需要導入的組件以全類名的方式返回仔戈,這些組件會被添加到容器中。根據(jù)引入的starters,調(diào)用自動配置類监徘,將相關依賴的jar包引入進來


AutoConfigurationImportSelector.getAutoConfigurationEntry->getCandidateConfigurations() ->SpringFactoriesLoader.loadFactoryNames() ->loadSpringFactories();
這些類都在spring-boot-autoconfigure-2.2.6.RELEASE里面的META-INF/spring.factories路徑里面

12.spring boot單元測試
(1)配置文件里面的prefix必須是小寫,否則編譯會不通過

person:
  name: Ken
  age: 28
  map: {k1: v1, k2: v2}
  list: 
    - test1
    - test2
  dog: 
    name: 旺財
    age: 10

13.使用@Configuration注解晋修,替換掉之前的xml配置文件,能在@Configuration注解的類中使用@Bean凰盔,將新的bean對象添加到spring的容器ApplicatioinContex中墓卦。

14@PropertySource在spring component中引入配置文件,并將值設置component中的屬性

15.如何查找Spring boot中application.properties可以配置哪些屬性

  • 首先户敬,ctrl+shift+t 搜索*AutoConfiguration.java類
@Configuration(proxyBeanMethods = false)
@AutoConfigureBefore(JmsAutoConfiguration.class)
@AutoConfigureAfter({ JndiConnectionFactoryAutoConfiguration.class })
@ConditionalOnClass({ ConnectionFactory.class, ActiveMQConnectionFactory.class })
@ConditionalOnMissingBean(ConnectionFactory.class)
@EnableConfigurationProperties({ ActiveMQProperties.class, JmsProperties.class })
@Import({ ActiveMQXAConnectionFactoryConfiguration.class, ActiveMQConnectionFactoryConfiguration.class })
public class ActiveMQAutoConfiguration {
}

-然后在里面找到@EnableConfigurationProperties(*Properties.class)注解的properties類落剪,在里面找到已經(jīng)默認配置好的配置類,里面的屬性值就是可以在application.properties里配置的屬性

@ConfigurationProperties(prefix = "spring.activemq")
public class ActiveMQProperties {

    /**
     * URL of the ActiveMQ broker. Auto-generated by default.
     */
    private String brokerUrl;

    /**
     * Whether the default broker URL should be in memory. Ignored if an explicit broker
     * has been specified.
     */
    private boolean inMemory = true;

    /**
     * Login user of the broker.
     */
    private String user;

    /**
     * Login password of the broker.
     */
    private String password;

    /**
     * Time to wait before considering a close complete.
     */
    private Duration closeTimeout = Duration.ofSeconds(15);

    /**
     * Whether to stop message delivery before re-delivering messages from a rolled back
     * transaction. This implies that message order is not preserved when this is enabled.
     */
    private boolean nonBlockingRedelivery = false;

    /**
     * Time to wait on message sends for a response. Set it to 0 to wait forever.
     */
    private Duration sendTimeout = Duration.ofMillis(0);

    }

16.spring boot中的配置類有需要在一定的條件下才能生效,里面有很多的@Condition注解尿庐,只有Condition為true時忠怖,配置類才會加載到容器中,相關配置才會生效抄瑟。
如果需要查看當前的spring boot應用使用了哪些配置類凡泣,在application.properties文件中設置debug = true,就可以在控制臺中看到生效的配置類

17.spring框架默認使用的日志系統(tǒng)是common-logging,而spring boot 使用的是logback皮假。
日志的級別由低到高依次有:trace->debgug->info->warn->error鞋拟,springboot默認的輸出日志級別是info。這個可以在配置文件里面設置 logging.level來進行修改惹资。

18.不同的框架如hibernate贺纲、spring、mybatis都會使用不同的日志框架褪测,但是它們都可以使用轉(zhuǎn)換jar包哮笆,包名和類名都是跟之前的日志系統(tǒng)一致,但是實際上調(diào)用的還是slf4j接口汰扭,最后可以統(tǒng)一成只調(diào)用一個日志實現(xiàn)系統(tǒng)稠肘。

19.日志配置文件,如logback.xml萝毛,會自動被日志框架識別项阴,無法使用profile等高級功能,但是如果后面加上 -spring的話笆包,如logback-spring.xml,會被spring框架識別环揽,并且可以使用高級功能。

20.SpringBoot通過WebMvcAutoConfiguration默認配置好了SpringMVC庵佣。自動配置的東西包括

  • 視圖解析器 viewResolver
  • 轉(zhuǎn)換器converter(類型轉(zhuǎn)換器) 格式器formater(日期格式器)
  • http消息轉(zhuǎn)換器 httpMessageConverter(Spring用來轉(zhuǎn)換http的請求和響應對象)

21.如何修改默認SpringMVC的默認配置
模式:
(1)SpringBoot在自動配置很多組件的時候歉胶,先看容器中有沒有用戶自己配置的(@Bean @Component),如果沒有用戶配置的才自動配置巴粪。如果有些組件可以有多個(ViewResolver),將使用用戶配置和默認配置的組合起來通今。

22.spring boot引入mybatis一定要添加版本號粥谬,否則會無法引入依賴

23.RequestParam 和RequestBody分別適用于表單提交以及json提交方式過來的數(shù)據(jù)

24.使用網(wǎng)頁發(fā)送http://localhost:8001/payment/create?serial=9001 請求,服務器端接收的參數(shù)是字符串辫塌,不用@RequestBody能將參數(shù)轉(zhuǎn)換為json對象接收漏策。
但是如果用RestTemplate發(fā)起請求調(diào)用,如果臼氨,controller參數(shù)沒有用@RequestBody注解掺喻,就無法接收到數(shù)據(jù)

批注 2020-06-13 122750.png

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市储矩,隨后出現(xiàn)的幾起案子感耙,更是在濱河造成了極大的恐慌,老刑警劉巖持隧,帶你破解...
    沈念sama閱讀 211,376評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件抑月,死亡現(xiàn)場離奇詭異,居然都是意外死亡舆蝴,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,126評論 2 385
  • 文/潘曉璐 我一進店門题诵,熙熙樓的掌柜王于貴愁眉苦臉地迎上來洁仗,“玉大人,你說我怎么就攤上這事性锭≡剩” “怎么了?”我有些...
    開封第一講書人閱讀 156,966評論 0 347
  • 文/不壞的土叔 我叫張陵草冈,是天一觀的道長她奥。 經(jīng)常有香客問我,道長怎棱,這世上最難降的妖魔是什么哩俭? 我笑而不...
    開封第一講書人閱讀 56,432評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮拳恋,結果婚禮上凡资,老公的妹妹穿的比我還像新娘。我一直安慰自己谬运,他們只是感情好隙赁,可當我...
    茶點故事閱讀 65,519評論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著梆暖,像睡著了一般伞访。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上轰驳,一...
    開封第一講書人閱讀 49,792評論 1 290
  • 那天厚掷,我揣著相機與錄音弟灼,去河邊找鬼。 笑死蝗肪,一個胖子當著我的面吹牛袜爪,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播薛闪,決...
    沈念sama閱讀 38,933評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼辛馆,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了豁延?” 一聲冷哼從身側(cè)響起昙篙,我...
    開封第一講書人閱讀 37,701評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎诱咏,沒想到半個月后苔可,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,143評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡袋狞,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,488評論 2 327
  • 正文 我和宋清朗相戀三年焚辅,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片苟鸯。...
    茶點故事閱讀 38,626評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡同蜻,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出早处,到底是詐尸還是另有隱情湾蔓,我是刑警寧澤,帶...
    沈念sama閱讀 34,292評論 4 329
  • 正文 年R本政府宣布砌梆,位于F島的核電站默责,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏咸包。R本人自食惡果不足惜桃序,卻給世界環(huán)境...
    茶點故事閱讀 39,896評論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望烂瘫。 院中可真熱鬧葡缰,春花似錦、人聲如沸忱反。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,742評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽温算。三九已至怜校,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間注竿,已是汗流浹背茄茁。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工魂贬, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人裙顽。 一個月前我還...
    沈念sama閱讀 46,324評論 2 360
  • 正文 我出身青樓付燥,卻偏偏與公主長得像,于是被迫代替她去往敵國和親愈犹。 傳聞我的和親對象是個殘疾皇子键科,可洞房花燭夜當晚...
    茶點故事閱讀 43,494評論 2 348