Springboot常è§é¢è¯é¢æ»ç»
è¿æ¯ä¸åæè®¸å¯¹ä½ æå¸®å©çä¿¡æ¯
- é¢è¯æåï¼è¿æ¯ä¸ä»½å¤§å½¬ç²¾å¿æ´çç大åé¢è¯æåææ°çï¼ç®åå·²ç»æ´æ°è¿ä»£äº19ä¸ªçæ¬ï¼è´¨éå¾é«ï¼ä¸ä¸ºé¢è¯æé ï¼
- ç¥è¯æçï¼ä¸å±é¢è¯æå/ä¸å¯¹ä¸äº¤æµ/ç®åä¿®æ¹/è¶ æ£çå¦ä¹ æ°å´/å¦ä¹ 路线è§åï¼æ¬¢è¿å å ¥å¤§å½¬çç¥è¯æçï¼ç¹å»é¾æ¥æ¥çæçç详ç»ä»ç»ï¼
Springbootçä¼ç¹
- å ç½®servlet容å¨ï¼ä¸éè¦å¨æå¡å¨é¨ç½² tomcatãåªéè¦å°é¡¹ç®ææ jar å ï¼ä½¿ç¨ java -jar xxx.jarä¸é®å¼å¯å¨é¡¹ç®
- SpringBootæä¾äºstarterï¼æå¸¸ç¨åºèåå¨ä¸èµ·ï¼ç®å夿çç¯å¢é ç½®ï¼å¿«éæå»ºspringåºç¨ç¯å¢
- å¯ä»¥å¿«éå建ç¬ç«è¿è¡çspring项ç®ï¼éæä¸»æµæ¡æ¶
- åç产ç¯å¢çè¿è¡åºç¨çæ§
Javawebãspringãspringmvcåspringbootæä»ä¹åºå«ï¼é½æ¯åä»ä¹ç¨çï¼
JavaWebæ¯ Java è¯è¨ç Web å¼åææ¯ï¼ä¸»è¦ç¨äºå¼å Web åºç¨ç¨åºï¼å æ¬åºäºæµè§å¨ç客æ·ç«¯ååºäºæå¡å¨ç Web æå¡å¨ã
Springæ¯ä¸ä¸ªè½»é级ç弿ºå¼åæ¡æ¶ï¼ä¸»è¦ç¨äºç®¡ç Java åºç¨ç¨åºä¸çç»ä»¶å对象ï¼å¹¶æä¾åç§æå¡ï¼å¦äºå¡ç®¡çãå®å ¨æ§å¶ãé¢ååé¢ç¼ç¨åè¿ç¨è®¿é®çã宿¯ä¸ä¸ªç»¼åæ§æ¡æ¶ï¼å¯åºç¨äºææç±»åç Java åºç¨ç¨åºã
SpringMVCæ¯ Spring æ¡æ¶ä¸çä¸ä¸ªæ¨¡åï¼ç¨äºå¼å Web åºç¨ç¨åºå¹¶å®ç° MVCï¼æ¨¡å-è§å¾-æ§å¶å¨ï¼è®¾è®¡æ¨¡å¼ï¼å®å°è¯·æ±åååºå离ï¼ä»è使å¾åºç¨ç¨åºæ´å 模ååã坿©å±åæäºç»´æ¤ã
Spring Bootæ¯åºäº Spring æ¡æ¶å¼åçç¨äºå¼å Web åºç¨ç¨åºçæ¡æ¶ï¼å®å¸®å©å¼å人åå¿«éæå»ºåé ç½®ä¸ä¸ªç¬ç«çã坿§è¡çãåºäº Spring çåºç¨ç¨åºï¼ä»èåå°äºç¹çåéå¤çé 置工ä½ã
ç»¼ä¸æè¿°ï¼JavaWebæ¯åºäº Java è¯è¨ç Web å¼åææ¯ï¼è Spring æ¯ä¸ä¸ªç»¼åæ§çå¼åæ¡æ¶ï¼SpringMVCç¨äºå¼å Web åºç¨ç¨åºå®ç° MVC 设计模å¼ï¼è Spring Boot æ¯åºäº Spring ç Web åºç¨ç¨åºå¼åæ¡æ¶ã
SpringBoot ä¸ç starter å°åºæ¯ä»ä¹ ?
starteræä¾äºä¸ä¸ªèªå¨åé 置类ï¼ä¸è¬å½å为 XXXAutoConfiguration ï¼å¨è¿ä¸ªé 置类ä¸éè¿æ¡ä»¶æ³¨è§£æ¥å³å®ä¸ä¸ªé ç½®æ¯å¦çæï¼æ¡ä»¶æ³¨è§£å°±æ¯ Spring ä¸åæ¬å°±æçï¼ï¼ç¶åå®è¿ä¼æä¾ä¸ç³»åçé»è®¤é ç½®ï¼ä¹å 许å¼åè æ ¹æ®å®é æ åµèªå®ä¹ç¸å ³é ç½®ï¼ç¶åéè¿ç±»åå®å ¨ç屿§æ³¨å ¥å°è¿äºé ç½®å±æ§æ³¨å ¥è¿æ¥ï¼æ°æ³¨å ¥ç屿§ä¼ä»£æ¿æé»è®¤å±æ§ãæ£å ä¸ºå¦æ¤ï¼å¾å¤ç¬¬ä¸æ¹æ¡æ¶ï¼æä»¬åªéè¦å¼å ¥ä¾èµå°±å¯ä»¥ç´æ¥ä½¿ç¨äºã
è¿è¡ SpringBoot æåªå ç§æ¹å¼ï¼
- æå ç¨å½ä»¤æè è æ¾å°å®¹å¨ä¸è¿è¡
- ç¨ Maven/Gradle æä»¶è¿è¡
- ç´æ¥æ§è¡ main æ¹æ³è¿è¡
SpringBoot 常ç¨ç Starter æåªäºï¼
- spring-boot-starter-web ï¼æä¾ Spring MVC + å åµç Tomcat ã
- spring-boot-starter-data-jpa ï¼æä¾ Spring JPA + Hibernate ã
- spring-boot-starter-data-Redis ï¼æä¾ Redis ã
- mybatis-spring-boot-starter ï¼æä¾ MyBatis ã
Spring Boot çæ ¸å¿æ³¨è§£æ¯åªä¸ªï¼
å¯å¨ç±»ä¸é¢ç注解æ¯@SpringBootApplicationï¼å®ä¹æ¯ Spring Boot çæ ¸å¿æ³¨è§£ï¼ä¸»è¦ç»åå å«äºä»¥ä¸ 3 个注解ï¼
- @SpringBootConfigurationï¼ç»åäº @Configuration 注解ï¼å®ç°é ç½®æä»¶çåè½ã
- @EnableAutoConfigurationï¼æå¼èªå¨é ç½®çåè½ï¼ä¹å¯ä»¥å ³éæä¸ªèªå¨é ç½®çé项ï¼å¦å ³éæ°æ®æºèªå¨é ç½®åè½ï¼ @SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })ã
- @ComponentScanï¼Springç»ä»¶æ«æã
æåªäºå¸¸ç¨çSpringBoot注解ï¼
@SpringBootApplicationãè¿ä¸ªæ³¨è§£æ¯Spring Bootææ ¸å¿ç注解ï¼ç¨å¨ Spring Bootç主类ä¸ï¼æ è¯è¿æ¯ä¸ä¸ª Spring Boot åºç¨ï¼ç¨æ¥å¼å¯ Spring Boot çå项è½å
@SpringBootConfigurationï¼ç»åäº @Configuration 注解ï¼å®ç°é ç½®æä»¶çåè½ã
@EnableAutoConfigurationï¼æå¼èªå¨é ç½®çåè½ï¼ä¹å¯ä»¥å ³éæä¸ªèªå¨é ç½®çé项ï¼å¦å ³éæ°æ®æºèªå¨é ç½®åè½ï¼ @SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })ã
@ComponentScanï¼Springç»ä»¶æ«æã
@Repositoryï¼ç¨äºæ æ³¨æ°æ®è®¿é®ç»ä»¶ï¼å³DAOç»ä»¶ã
@Serviceï¼ä¸è¬ç¨äºä¿®é¥°serviceå±çç»ä»¶
@RestControllerãç¨äºæ 注æ§å¶å±ç»ä»¶(å¦strutsä¸çaction)ï¼è¡¨ç¤ºè¿æ¯ä¸ªæ§å¶å¨bean,并䏿¯å°å½æ°çè¿åå¼ç´ æ¥å¡«å ¥HTTPååºä½ä¸,æ¯REST飿 ¼çæ§å¶å¨ï¼å®æ¯@Controllerå@ResponseBodyçåéã
@ResponseBodyãè¡¨ç¤ºè¯¥æ¹æ³çè¿åç»æç´æ¥åå ¥HTTP response bodyä¸
@Componentãæ³æç»ä»¶ï¼å½ç»ä»¶ä¸å¥½å½ç±»çæ¶åï¼æä»¬å¯ä»¥ä½¿ç¨è¿ä¸ªæ³¨è§£è¿è¡æ 注ã
@Beanï¼ç¸å½äºXMLä¸ç
<bean></bean>,æ¾å¨æ¹æ³çä¸é¢ï¼è䏿¯ç±»ï¼æææ¯äº§çä¸ä¸ªbean,并交ç»spring管çã@AutoWiredï¼byTypeæ¹å¼ãæé 置好çBeanæ¿æ¥ç¨ï¼å®æå±æ§ãæ¹æ³çç»è£ ï¼å®å¯ä»¥å¯¹ç±»æååéãæ¹æ³åæé 彿°è¿è¡æ 注ï¼å®æèªå¨è£ é çå·¥ä½ã
@Qualifierã彿å¤ä¸ªåä¸ç±»åçBeanæ¶ï¼å¯ä»¥ç¨@Qualifier("name")æ¥æå®ãä¸@Autowiredé å使ç¨
@Resource(name="name",type="type")ãæ²¡ææ¬å·å å 容çè¯ï¼é»è®¤byNameãä¸@Autowired干类似çäºã
@RequestMapping
RequestMappingæ¯ä¸ä¸ªç¨æ¥å¤ç请æ±å°åæ å°çæ³¨è§£ï¼æä¾è·¯ç±ä¿¡æ¯ï¼è´è´£URLå°Controllerä¸çå ·ä½å½æ°çæ å°ï¼å¯ç¨äºç±»ææ¹æ³ä¸ãç¨äºç±»ä¸ï¼è¡¨ç¤ºç±»ä¸çææååºè¯·æ±çæ¹æ³é½æ¯ä»¥è¯¥å°åä½ä¸ºç¶è·¯å¾ã
@RequestParam
ç¨å¨æ¹æ³çåæ°åé¢ã
@Scope
ç¨äºå£°æä¸ä¸ªSpring
Beanå®ä¾çä½ç¨å@Primary
å½åä¸ä¸ªå¯¹è±¡æå¤ä¸ªå®ä¾æ¶ï¼ä¼å éæ©è¯¥å®ä¾ã
@PostConstruct
ç¨äºä¿®é¥°æ¹æ³ï¼å½å¯¹è±¡å®ä¾è¢«å建并ä¸ä¾èµæ³¨å ¥å®æåæ§è¡ï¼å¯ç¨äºå¯¹è±¡å®ä¾çåå§åæä½ã
@PreDestroy
ç¨äºä¿®é¥°æ¹æ³ï¼å½å¯¹è±¡å®ä¾å°è¢«Spring容å¨ç§»é¤æ¶æ§è¡ï¼å¯ç¨äºå¯¹è±¡å®ä¾ææèµæºçéæ¾ã
@EnableTransactionManagement
å¯ç¨Springåºäºæ³¨è§£çäºå¡ç®¡çåè½ï¼éè¦å
@Configuration注解ä¸èµ·ä½¿ç¨ã@Transactional
è¡¨ç¤ºæ¹æ³åç±»éè¦å¼å¯äºå¡ï¼å½ä½ç¨ä¸ç±»ä¸æ¶ï¼ç±»ä¸æææ¹æ³åä¼å¼å¯äºå¡ï¼å½ä½ç¨äºæ¹æ³ä¸æ¶ï¼æ¹æ³å¼å¯äºå¡ï¼æ¹æ³ä¸çæ³¨è§£æ æ³è¢«åç±»æç»§æ¿ã
@ControllerAdvice
常ä¸
@ExceptionHandler注解ä¸èµ·ä½¿ç¨ï¼ç¨äºæè·å ¨å±å¼å¸¸ï¼è½ä½ç¨äºææcontrollerä¸ã@ExceptionHandler
ä¿®é¥°æ¹æ³æ¶ï¼è¡¨ç¤ºè¯¥æ¹æ³ä¸ºå¤çå ¨å±å¼å¸¸çæ¹æ³ã
èªå¨é ç½®åç
SpringBootå®ç°èªå¨é ç½®åçå¾è§£ï¼
å ¬ä¼å·ãç¨åºå大彬ãï¼åå¤ãèªå¨é ç½®ãä¸è½½é«æ¸ å¾ç

å¨ application.properties ä¸è®¾ç½®å±æ§ debug=trueï¼å¯ä»¥å¨æ§å¶å°æ¥çå·²å¯ç¨åæªå¯ç¨çèªå¨é ç½®ã
@SpringBootApplicationæ¯@Configurationã@EnableAutoConfigurationå@ComponentScançç»åã
@Configuration表示该类æ¯Javaé 置类ã
@ComponentScanå¼å¯èªå¨æ«æç¬¦åæ¡ä»¶çbeanï¼æ·»å äº@Controllerã@Serviceçæ³¨è§£ï¼ã
@EnableAutoConfiguration伿 ¹æ®ç±»è·¯å¾ä¸çjarä¾èµä¸ºé¡¹ç®è¿è¡èªå¨é
ç½®ï¼æ¯å¦æ·»å äºspring-boot-starter-webä¾èµï¼ä¼èªå¨æ·»å TomcatåSpring MVCçä¾èµï¼ç¶åSpring Bootä¼å¯¹TomcatåSpring MVCè¿è¡èªå¨é
ç½®ï¼spring.factories EnableAutoConfigurationé
ç½®äºWebMvcAutoConfigurationï¼ã
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@AutoConfigurationPackage
@Import(EnableAutoConfigurationImportSelector.class)
public @interface EnableAutoConfiguration {
}
EnableAutoConfiguration主è¦ç± @AutoConfigurationPackageï¼@Import(EnableAutoConfigurationImportSelector.class)è¿ä¸¤ä¸ªæ³¨è§£ç»æçã
@AutoConfigurationPackageç¨äºå°å¯å¨ç±»æå¨çå éé¢çææç»ä»¶æ³¨åå°spring容å¨ã
@Import å°EnableAutoConfigurationImportSelectoræ³¨å ¥å°spring容å¨ä¸ï¼EnableAutoConfigurationImportSelectoréè¿SpringFactoriesLoaderä»ç±»è·¯å¾ä¸å»è¯»åMETA-INF/spring.factoriesæä»¶ä¿¡æ¯ï¼æ¤æä»¶ä¸æä¸ä¸ªkey为org.springframework.boot.autoconfigure.EnableAutoConfigurationï¼å®ä¹äºä¸ç»éè¦èªå¨é ç½®çbeanã
# Auto Configure
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
org.springframework.boot.autoconfigure.admin.SpringApplicationAdminJmxAutoConfiguration,\
org.springframework.boot.autoconfigure.aop.AopAutoConfiguration,\
org.springframework.boot.autoconfigure.amqp.RabbitAutoConfiguration,\
org.springframework.boot.autoconfigure.batch.BatchAutoConfiguration,\
org.springframework.boot.autoconfigure.cache.CacheAutoConfiguration,\
è¿äºé ç½®ç±»ä¸æ¯é½ä¼è¢«å è½½ï¼ä¼æ ¹æ®xxxAutoConfigurationä¸ç@ConditionalOnClassçæ¡ä»¶å¤ææ¯å¦å è½½ï¼ç¬¦åæ¡ä»¶æä¼å°ç¸åºçç»ä»¶è¢«å è½½å°spring容å¨ãï¼æ¯å¦mybatis-spring-boot-starterï¼ä¼èªå¨é ç½®sqlSessionFactoryãsqlSessionTemplateãdataSourceçmybatisæéçç»ä»¶ï¼
@Configuration
@ConditionalOnClass({ EnableAspectJAutoProxy.class, Aspect.class, Advice.class,
AnnotatedElement.class }) //类路å¾åå¨EnableAspectJAutoProxyçç±»æä»¶ï¼æä¼å è½½æ¤é
置类
@ConditionalOnProperty(prefix = "spring.aop", name = "auto", havingValue = "true", matchIfMissing = true)
public class AopAutoConfiguration {
@Configuration
@EnableAspectJAutoProxy(proxyTargetClass = false)
@ConditionalOnProperty(prefix = "spring.aop", name = "proxy-target-class", havingValue = "false", matchIfMissing = false)
public static class JdkDynamicAutoProxyConfiguration {
}
@Configuration
@EnableAspectJAutoProxy(proxyTargetClass = true)
@ConditionalOnProperty(prefix = "spring.aop", name = "proxy-target-class", havingValue = "true", matchIfMissing = true)
public static class CglibAutoProxyConfiguration {
}
}
å ¨å±é ç½®æä»¶ä¸ç屿§å¦ä½çæï¼æ¯å¦ï¼server.port=8081ï¼æ¯å¦ä½çæçï¼
@ConfigurationPropertiesçä½ç¨å°±æ¯å°é ç½®æä»¶ç屿§ç»å®å°å¯¹åºçbeanä¸ãå ¨å±é ç½®ç屿§å¦ï¼server.portçï¼éè¿@ConfigurationProperties注解ï¼ç»å®å°å¯¹åºçXxxxProperties beanï¼éè¿è¿ä¸ª bean è·åç¸åºç屿§ï¼serverProperties.getPort()ï¼ã
//server.port = 8080
@ConfigurationProperties(prefix = "server", ignoreUnknownFields = true)
public class ServerProperties {
private Integer port;
private InetAddress address;
@NestedConfigurationProperty
private final ErrorProperties error = new ErrorProperties();
private Boolean useForwardHeaders;
private String serverHeader;
//...
}
å®ç°èªå¨é ç½®
å®ç°å½æä¸ªç±»å卿¶ï¼èªå¨é ç½®è¿ä¸ªç±»çbeanï¼å¹¶ä¸å¯ä»¥å¨application.propertiesä¸é ç½®beanç屿§ã
ï¼1ï¼æ°å»ºMaven项ç®spring-boot-starter-helloï¼ä¿®æ¹pom.xmlå¦ä¸ï¼
<?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.tyson</groupId>
<artifactId>spring-boot-starter-hello</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-autoconfigure</artifactId>
<version>1.3.0.M1</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
</dependency>
</dependencies>
</project>
ï¼2ï¼å±æ§é ç½®
public class HelloService {
private String msg;
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public String sayHello() {
return "hello" + msg;
}
}
import org.springframework.boot.context.properties.ConfigurationProperties;
@ConfigurationProperties(prefix="hello")
public class HelloServiceProperties {
private static final String MSG = "world";
private String msg = MSG;
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
}
ï¼3ï¼èªå¨é 置类
import com.tyson.service.HelloService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
@EnableConfigurationProperties(HelloServiceProperties.class) //1
@ConditionalOnClass(HelloService.class) //2
@ConditionalOnProperty(prefix="hello", value = "enabled", matchIfMissing = true) //3
public class HelloServiceAutoConfiguration {
@Autowired
private HelloServiceProperties helloServiceProperties;
@Bean
@ConditionalOnMissingBean(HelloService.class) //4
public HelloService helloService() {
HelloService helloService = new HelloService();
helloService.setMsg(helloServiceProperties.getMsg());
return helloService;
}
}
@EnableConfigurationProperties 注解å¼å¯å±æ§æ³¨å ¥ï¼å°å¸¦æ@ConfigurationProperties 注解çç±»æ³¨å ¥ä¸ºSpring 容å¨ç Beanã
å½ HelloService å¨ç±»è·¯å¾çæ¡ä»¶ä¸ã
å½è®¾ç½® hello=enabled çæ åµä¸ï¼å¦ææ²¡æè®¾ç½®åé»è®¤ä¸º trueï¼å³æ¡ä»¶ç¬¦åã
å½å®¹å¨æ²¡æè¿ä¸ª Bean çæ¶åã
ï¼4ï¼æ³¨åé ç½®
æ³è¦èªå¨é ç½®çæï¼éè¦æ³¨åèªå¨é 置类ãå¨ src/main/resources 䏿°å»º META-INF/spring.factoriesãæ·»å 以ä¸å 容ï¼
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.tyson.config.HelloServiceAutoConfiguration
"\"æ¯ä¸ºäºæ¢è¡åä»ç¶è½è¯»å°å±æ§ãè¥æå¤ä¸ªèªå¨é ç½®ï¼åç¨éå·éå¼ã
ï¼5ï¼ä½¿ç¨starter
å¨ Spring Boot 项ç®ç pom.xml 䏿·»å ï¼
<dependency>
<groupId>com.tyson</groupId>
<artifactId>spring-boot-starter-hello</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
è¿è¡ç±»å¦ä¸ï¼
import com.tyson.service.HelloService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@SpringBootApplication
public class SpringbootDemoApplication {
@Autowired
public HelloService helloService;
@RequestMapping("/")
public String index() {
return helloService.getMsg();
}
public static void main(String[] args) {
SpringApplication.run(SpringbootDemoApplication.class, args);
}
}
å¨é¡¹ç®ä¸æ²¡æé ç½® HelloService beanï¼ä½æ¯æä»¬å¯ä»¥æ³¨å ¥è¿ä¸ªbeanï¼è¿æ¯éè¿èªå¨é ç½®å®ç°çã
å¨ application.properties 䏿·»å debug 屿§ï¼è¿è¡é 置类ï¼å¨æ§å¶å°å¯ä»¥çå°ï¼
HelloServiceAutoConfiguration matched:
- @ConditionalOnClass found required class 'com.tyson.service.HelloService' (OnClassCondition)
- @ConditionalOnProperty (hello.enabled) matched (OnPropertyCondition)
HelloServiceAutoConfiguration#helloService matched:
- @ConditionalOnMissingBean (types: com.tyson.service.HelloService; SearchStrategy: all) did not find any beans (OnBeanCondition)
å¯ä»¥å¨ application.properties ä¸é ç½® msg çå 容ï¼
hello.msg=大彬
@Value注解çåç
@Valueçè§£æå°±æ¯å¨beanåå§åé¶æ®µãBeanPostProcessorå®ä¹äºbeanåå§åååç¨æ·å¯ä»¥å¯¹beanè¿è¡æä½çæ¥å£æ¹æ³ï¼å®çä¸ä¸ªéè¦å®ç°ç±»AutowiredAnnotationBeanPostProcessor为beanä¸ç@Autowiredå@Valueæ³¨è§£çæ³¨å
¥åè½æä¾æ¯æã
Spring Boot éè¦ç¬ç«ç容å¨è¿è¡åï¼
ä¸éè¦ï¼å ç½®äº Tomcat/ Jetty ç容å¨ã
Spring Boot æ¯æåªäºæ¥å¿æ¡æ¶ï¼
Spring Boot æ¯æ Java Util Logging, Log4j2, Lockback ä½ä¸ºæ¥å¿æ¡æ¶ï¼å¦æä½ ä½¿ç¨ Starters å¯å¨å¨ï¼Spring Boot å°ä½¿ç¨ Logback ä½ä¸ºé»è®¤æ¥å¿æ¡æ¶ï¼ä½æ¯ä¸ç®¡æ¯é£ç§æ¥å¿æ¡æ¶ä»é½æ¯æå°é ç½®æä»¶è¾åºå°æ§å¶å°æè æä»¶ä¸ã
YAML é ç½®çä¼å¿å¨åªé ?
YAML é ç½®åä¼ ç»ç properties é ç½®ç¸æ¯ä¹ä¸ï¼æè¿äºä¼å¿ï¼
- é ç½®æåº
- ç®æ´æäºï¼æ¯ææ°ç»ï¼æ°ç»ä¸çå ç´ å¯ä»¥æ¯åºæ¬æ°æ®ç±»åä¹å¯ä»¥æ¯å¯¹è±¡
缺ç¹å°±æ¯ä¸æ¯æ @PropertySource æ³¨è§£å¯¼å ¥èªå®ä¹ç YAML é ç½®ã
ä»ä¹æ¯ Spring Profilesï¼
å¨é¡¹ç®çå¼åä¸ï¼æäºé ç½®æä»¶å¨å¼åãæµè¯æè ç产çä¸åç¯å¢ä¸å¯è½æ¯ä¸åçï¼ä¾å¦æ°æ®åºè¿æ¥ãredisçé ç½®ççã飿们å¦ä½å¨ä¸åç¯å¢ä¸èªå¨å®ç°é ç½®ç忢å¢ï¼Springç»æä»¬æä¾äºprofilesæºå¶ç»æä»¬æä¾çå°±æ¯æ¥å忢é ç½®æä»¶çåè½
Spring Profiles å è®¸ç¨æ·æ ¹æ®é ç½®æä»¶ï¼devï¼testï¼prod çï¼æ¥æ³¨å beanãå æ¤ï¼å½åºç¨ç¨åºå¨å¼åä¸è¿è¡æ¶ï¼åªææäº bean å¯ä»¥å è½½ï¼èå¨ PRODUCTIONä¸ï¼æäºå ¶ä» bean å¯ä»¥å è½½ãå设æä»¬çè¦æ±æ¯ Swagger ææ¡£ä» éç¨äº QA ç¯å¢ï¼å¹¶ä¸ç¦ç¨ææå ¶ä»ææ¡£ãè¿å¯ä»¥ä½¿ç¨é ç½®æä»¶æ¥å®æãSpring Boot 使å¾ä½¿ç¨é ç½®æä»¶é常ç®åã
SpringBoot夿°æ®æºäºå¡å¦ä½ç®¡ç
第ä¸ç§æ¹å¼æ¯å¨serviceå±ç@TransactionManagerä¸ä½¿ç¨transactionManageræå®DataSourceConfigä¸é ç½®çäºå¡ã
第äºç§æ¯ä½¿ç¨jta-atomikoså®ç°åå¸å¼äºå¡ç®¡çã
spring-boot-starter-parent æä»ä¹ç¨ ?
æ°å建ä¸ä¸ª Spring Boot 项ç®ï¼é»è®¤é½æ¯æ parent çï¼è¿ä¸ª parent å°±æ¯ spring-boot-starter-parent ï¼spring-boot-starter-parent ä¸»è¦æå¦ä¸ä½ç¨ï¼
- å®ä¹äº Java ç¼è¯çæ¬ã
- ä½¿ç¨ UTF-8 æ ¼å¼ç¼ç ã
- æ§è¡æå æä½çé ç½®ã
- èªå¨åçèµæºè¿æ»¤ã
- èªå¨åçæä»¶é ç½®ã
- é对 application.properties å application.yml çèµæºè¿æ»¤ï¼å æ¬éè¿ profile å®ä¹çä¸åç¯å¢çé ç½®æä»¶ï¼ä¾å¦ application-dev.properties å application-dev.ymlã
Spring Boot ææç jar åæ®éç jar æä»ä¹åºå« ?
- Spring Boot é¡¹ç®æç»æå
æç jar æ¯å¯æ§è¡ jar ï¼è¿ç§ jar å¯ä»¥ç´æ¥éè¿
java -jar xxx.jarå½ä»¤æ¥è¿è¡ï¼è¿ç§ jar ä¸å¯ä»¥ä½ä¸ºæ®éç jar è¢«å ¶ä»é¡¹ç®ä¾èµï¼å³ä½¿ä¾èµäºä¹æ æ³ä½¿ç¨å ¶ä¸çç±»ã - Spring Boot ç jar æ æ³è¢«å
¶ä»é¡¹ç®ä¾èµï¼ä¸»è¦è¿æ¯ä»åæ®é jar çç»æä¸åãæ®éç jar å
ï¼è§£ååç´æ¥å°±æ¯å
åï¼å
éå°±æ¯æä»¬ç代ç ï¼è Spring Boot æå
æç坿§è¡ jar è§£ååï¼å¨
\BOOT-INF\classesç®å½ä¸ææ¯æä»¬ç代ç ï¼å æ¤æ æ³è¢«ç´æ¥å¼ç¨ã妿éè¦å¼ç¨ï¼å¯ä»¥å¨ pom.xml æä»¶ä¸å¢å é ç½®ï¼å° Spring Boot é¡¹ç®æå æä¸¤ä¸ª jar ï¼ä¸ä¸ªå¯æ§è¡ï¼ä¸ä¸ªå¯å¼ç¨ã
SpringBoot夿°æ®æºæåçæè·¯
å å¨propertiesé ç½®æä»¶ä¸é ç½®ä¸¤ä¸ªæ°æ®æºï¼å建åå mapperï¼ä½¿ç¨@ConfigurationProperties读åpropertiesä¸çé ç½®ï¼ä½¿ç¨@MapperScan注åå°å¯¹åºçmapperå ä¸ ã
