Spring全家桶的学习(1)

前言:

去年九月份我和同事在极客时间上买了 丁雪丰 的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);
    }
}

这篇文章先总结到这,文章内容太多可读性就很差,我接下来还会出几期文章

发布了66 篇原创文章 · 获赞 49 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/tangthh123/article/details/104945631