前言:
去年九月份我和同事在极客时间上买了 丁雪丰 的Spring 全家桶学习,课程总共分为16章,我已经学了大半部分了,之前是在笔记本上记录,今天我想记录在Blog 上 ,分享更多的知识给有需要帮助的人,我会以章节数来作为文章的内容,原课程讲的更详细,我这里就一些具体的点做一个总结。
1.Spring 全家桶包含哪些?
诞生于2002 作者是 Rod JohnSon,现在Spring 已经发展到5.x 版本了
SpringFrameWork
用于构建企业应用的轻量级解决方案
理念:
- 1.体现海纳百川的精神
- 2.保持向后兼容性
- 3.专注API 设计
- 4.追求严苛的代码质量
SpringBoot
概念:快速构建基于Spring的应用程序
特点:
- 1.快
- 2.开箱即可用。
- 3.提供各种非功能属性
- 4.不用生成代码 没有XML 配置
- 5.内置Tomcat容器 ,启动非常的方便。
二.了解Spring 的发展趋势
改动点:
- 1.Java 8+ Kotlin
- 2.WebFlux (异步编程模式的崛起)
- 3.去掉了很多支持 (Portlet 过时了,Velocity 不维护了 JasperReport 不流行了)
三.创建一个Spring程序
省略
四.如何配置单数据源
SpringBoot做了哪些配置
- DataSourceAutoConfiguration (配置DataSource)
- DataSourceTransactionManagerAutoConfiguation(配置DataSourceTransactionManager)
- JdbcTemplateAutoConfiguration (配置JdbcTemplate)
配置mysql连接信息
spring.datasource.url=jdbc:mysql://localhost:3306/prod?useUnicode=true&characterEncoding=utf8&useSSL=false spring.datasource.username=root spring.datasource.password=root spring.datasource.driver-class-name=com.mysql.jdbc.Driver
pom 文件中引入依赖
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.39</version>
</dependency>
配置内嵌数据库 h2
(1) 新建一个SpringBoot项目
(2) 在创建这个SpringBoot项目的时候我引入了 hz 和 jdbc
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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.5.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>spring-demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>spring-demo</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jdbc</artifactId>
</dependency>
<!--h2内嵌数据库-->
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
(3) 在配置文件中配置h2连接信息
server.port=8007
management.endpoints.web.exposure.include=*
spring.output.ansi.enabled=ALWAYS
spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.username=sa
spring.datasource.password=
(4) 往这个默认的h2 数据库中添加数据
(5)启动这个Spring 服务
打印数据出来的时候连接的就是这个h2 数据库。
五.如何配置多数据源
配置多数据源的注意事项:
- 1.不同数据源配置要分开
- 2.关注每次使用的数据源
- a. 有多个DataSource 时系统应该如何判断
- b. 对应的设施(事务,ORM 等) 如何选择DataSource
多数据源配置有俩种方式:
第一种,完全的靠手工配置,排除掉SpringBoot相关的依赖,这个是完全可以的。
第二种, 如果想与SpringBoot 协同合作(二选一)。
方式一. 配置@Primary 类型的Bean
方式二. 排除掉 SpringBoot的自动配置
(DataSourceAutoConfiguation DataSourceTransactionManagerAutoConfiguation JdbcTemplateAutoConfiguation )
今天介绍一下第二种方式的用法:
步骤(1):
在配置文件中配置连接信息:
server.port=8007
management.endpoints.web.exposure.include=*
spring.output.ansi.enabled=ALWAYS
foo.datasource.url=jdbc:h2:mem:foo
foo.datasource.username=sa
foo.datasource.password=
bar.datasource.url=jdbc:h2:mem:bar
bar.datasource.username=sa
bar.datasource.password=
步骤(2):
package com.example;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.boot.autoconfigure.jdbc.DataSourceTransactionManagerAutoConfiguration;
import org.springframework.boot.autoconfigure.jdbc.JdbcTemplateAutoConfiguration;
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class,
DataSourceTransactionManagerAutoConfiguration.class,
JdbcTemplateAutoConfiguration.class})
public class SpringDemoApplication {
public static void main(String[] args) {
SpringApplication.run(SpringDemoApplication.class, args);
}
}
步骤(3):
package com.example.config;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.autoconfigure.jdbc.DataSourceProperties;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.transaction.PlatformTransactionManager;
import javax.annotation.Resource;
import javax.sql.DataSource;
@Configuration
public class MultiDataSourceConfig {
private Logger log = LoggerFactory.getLogger(MultiDataSourceConfig.class);
/**
* Config Foo DataSource
* @return
*/
@Bean
@ConfigurationProperties("foo.datasource")
public DataSourceProperties fooDataSourceProperties() {
return new DataSourceProperties();
}
@Bean
public DataSource fooDataSource() {
DataSourceProperties dataSourceProperties = fooDataSourceProperties();
log.info("foo datasource: {}", dataSourceProperties.getUrl());
return dataSourceProperties.initializeDataSourceBuilder().build();
}
@Bean
@Resource
public PlatformTransactionManager fooTxManager(DataSource fooDataSource) {
return new DataSourceTransactionManager(fooDataSource);
}
/**
* Config Bar DataSource
* @return
*/
@Bean
@ConfigurationProperties("bar.datasource")
public DataSourceProperties barDataSourceProperties() {
return new DataSourceProperties();
}
@Bean
public DataSource barDataSource() {
DataSourceProperties dataSourceProperties = barDataSourceProperties();
log.info("bar datasource: {}", dataSourceProperties.getUrl());
return dataSourceProperties.initializeDataSourceBuilder().build();
}
@Bean
@Resource
public PlatformTransactionManager barTxManager(DataSource barDataSource) {
return new DataSourceTransactionManager(barDataSource);
}
}
这篇文章先总结到这,文章内容太多可读性就很差,我接下来还会出几期文章