前言
Spring簡化了Java的開發,而SpringBoot簡化了Spring。本文用SpringBoot采用分層的結構整合了filter,aspect,mybaits,logback,redis,rocketmq和dubbo等框架。這是一個比較接近實際項目的版本。
mybaits
在application.properties配置數據源和目錄就行了,不用配置SqlSessionFactory和TransactionManager,如下
#mysql spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver spring.datasource.url=jdbc:mysql://localhost:3306/mysql?serverTimezone=GMT%2B8 spring.datasource.username=root spring.datasource.password=111111 # mybatis # mybatis.config-location=classpath:/mybatis/mybatis-config.xml mybatis.mapper-locations=classpath*:/mappers/*.xml mybatis.type-aliases-package=com.example.demo.repository.entity
另外還需要設置MapperScan,如
@SpringBootApplication(scanBasePackages = "com.example.demo") @MapperScan("com.example.demo.repository.dao") public class StartApplication { public static void main(String[] args) { SpringApplication.run(StartApplication.class, args); } }
logback
springboot支持logback,log4j等日志框架。如果用logback的話,springboot會默認尋找logback.xml或者logback-spring.xml。所以只需要配置一下,如
<?xml version="1.0" encoding="UTF-8" ?> <configuration scan="true"> <!-- Convert mvn placeholder to a logback managed property --> <property name="log.home" value="../logs"/> <property name="log.level" value="INFO"/> <!--============================================================= === Appender definition === =============================================================--> <appender name="ROOT" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${log.home}/root.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>${log.home}/root.log.%d{yyyy-MM-dd}</fileNamePattern> <maxHistory>10</maxHistory> </rollingPolicy> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n</pattern> <charset>UTF-8</charset> </encoder> </appender> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n</pattern> <charset>UTF-8</charset> </encoder> </appender> <appender name="biz-appender" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${log.home}/biz.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>${log.home}/biz.log.%d{yyyy-MM-dd}</fileNamePattern> <maxHistory>10</maxHistory> </rollingPolicy> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n</pattern> <charset>UTF-8</charset> </encoder> </appender> <!-- default --> <root level="${log.level:-INFO}"> <appender-ref ref="ROOT"/> <appender-ref ref="STDOUT"/> </root> <logger name="com.example.demo.biz" level="${log.level:-INFO}" additivity="false"> <appender-ref ref="biz-appender"/> </logger> </configuration>
redis
redis配置非常簡單,只需要加入依賴和配置就行
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency>
# Redis服務器地址 spring.redis.host=localhost # Redis服務器連接端口 spring.redis.port=6379 # Redis服務器連接密碼(默認為空) spring.redis.password=
rocketmq
需要加入一個依賴,如
<dependency> <groupId>org.apache.rocketmq</groupId> <artifactId>rocketmq-spring-boot-starter</artifactId> </dependency>
消費者,如
@Component @RocketMQMessageListener(topic="${rocketmq.topic}", consumerGroup = "${rocketmq.consumer.group}") public class MyConsumer implements RocketMQListener<String> { private final static org.slf4j.Logger logger = LoggerFactory.getLogger(MyConsumer.class); @Override public void onMessage(String s) { logger.info(s); } }
生產者,如
@Component public class MyProducer { @Value("${rocketmq.topic}") private String topic; @Autowired(required = false) private RocketMQTemplate rocketMQTemplate; public void sendMessage(Object message){ rocketMQTemplate.convertAndSend(topic, message); } }
dubbo
dubbo要用到zookeeper作為注冊中心,所以要加入以下依賴,不過記得要排除slj4的依賴,不然會依賴沖突
<dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo-spring-boot-starter</artifactId> </dependency> <!-- Dubbo --> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo</artifactId> </dependency> <!-- Zookeeper dependencies --> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo-dependencies-zookeeper</artifactId> </dependency>
屬性配置
# Spring boot application spring.application.name=dubbo-auto-configuration-provider-demo # Base packages to scan Dubbo Component: @org.apache.dubbo.config.annotation.Service dubbo.scan.base-packages=com.example.demo.biz.service.apiimpl dubbo.protocol.name=dubbo dubbo.protocol.port=20880 dubbo.registry.address=zookeeper://127.0.0.1:2181
服務提供者,需要注意的是注解@Service是org.apache.dubbo.config.annotation.Service
@Service public class MyFacadeImpl implements MyFacade { @Override public List<GoodVO> getHotGoodList() { List<GoodVO> list=new ArrayList<>(); GoodVO vo=new GoodVO(); vo.setName("可樂"); vo.setPrice(new BigDecimal(2.33)); list.add(vo); return list; } }
服務消費者
@Reference(check = false) MyFacade myFacade;
源碼
源碼地址 https://github.com/mycaizilin/springbootdemo
划重點
重點來了。雖然我看博客也寫博客,但是不建議學習技術只看博客。首先,博客上的知識不一定是對的。其次,大多數博客都是作者的當時零碎記錄,是不夠全面和成體系的,而且可能是過期的。我比較推薦的是看官方文檔,如官網上和GitHub上的,看官方的文檔看不懂再來找其他資料也不遲。下面是springboot相關的一些官方文檔。
springboot官方文檔: https://docs.spring.io/spring-boot/docs/2.1.4.RELEASE/reference/htmlsingle/
Dubbo Spring Boot : https://github.com/apache/incubator-dubbo-spring-boot-project/blob/master/README_CN.md
Dubbo 官方文檔:: http://dubbo.apache.org/zh-cn/docs/user/quick-start.html
Rocketmq springboot文檔: https://github.com/apache/rocketmq-spring/blob/master/README_zh_CN.md
Rocketmq 官方文檔: http://rocketmq.apache.org/docs/motivation/
mybaits springboot: http://www.mybatis.org/spring-boot-starter/mybatis-spring-boot-autoconfigure/