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ù)