springboot 总结(二)

  1. JDBC
  • 加入依赖
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
  • 在resources 根目录下创建application.yml 文件
spring:
  datasource:
    username: root
    password: abc123
    url: jdbc:mysql://localhost:3306/test_db
    driver-class-name: com.mysql.jdbc.Driver

说明:

​ 数据源相关的配置都在DataSourceProperties 里面

@ConfigurationProperties(
    prefix = "spring.datasource"
)
public class DataSourceProperties implements BeanClassLoaderAware, InitializingBean {
    private ClassLoader classLoader;
    private String name;
    private boolean generateUniqueName;
    private Class<? extends DataSource> type;
    private String driverClassName;
    private String url;
    private String username;
    private String password;
    private String jndiName;

​ 不同的springboot版本,默认使用的数据源不同,如:com.zaxxer.hikari.HikariDataSource

public class HikariDataSource extends HikariConfig implements DataSource, Closeable {
    private static final Logger LOGGER = LoggerFactory.getLogger(HikariDataSource.class);
    private final AtomicBoolean isShutdown = new AtomicBoolean();
    private final HikariPool fastPathPool;
    private volatile HikariPool pool;

​ 不同的数据源都实现了javax.sql.DataSource 接口

  • 自动配置原理

org.springframework.boot.autoconfigure.jdbc.DataSourceConfiguration 中配置了很多数据源bean,如:

    @ConditionalOnClass({HikariDataSource.class})
    @ConditionalOnMissingBean({DataSource.class})
    @ConditionalOnProperty(
        name = {"spring.datasource.type"},
        havingValue = "com.zaxxer.hikari.HikariDataSource",
        matchIfMissing = true
    )
    static class Hikari {
        Hikari() {
        }

        @Bean
        @ConfigurationProperties(
            prefix = "spring.datasource.hikari"
        )
        public HikariDataSource dataSource(DataSourceProperties properties) {
            HikariDataSource dataSource = (HikariDataSource)DataSourceConfiguration.createDataSource(properties, HikariDataSource.class);
            if (StringUtils.hasText(properties.getName())) {
                dataSource.setPoolName(properties.getName());
            }

            return dataSource;
        }
    }

可以看到创建数据源时会用到DataSourceProperties properties

  • DataSourceInitializer 可以用来执行sql 脚本(在应用每次启动的时候),在数据源配置项中用schema 字段指定sql 脚本的位置
  1. 集成 druid
  • 加入依赖
<!-- https://mvnrepository.com/artifact/com.alibaba/druid -->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid</artifactId>
    <version>1.1.10</version>
</dependency>

  • 在数据源配置文件中用type 字段指定数据源
spring:
  datasource:
    username: root
    password: abc123
    url: jdbc:mysql://localhost:3306/test_db
    driver-class-name: com.mysql.jdbc.Driver
    type: com.alibaba.druid.pool.DruidDataSource
  • 指定druid 其他属性

    加入其他属性

spring:
  datasource:
    username: root
    password: abc123
    url: jdbc:mysql://localhost:3306/test_db
    driver-class-name: com.mysql.jdbc.Driver
    type: com.alibaba.druid.pool.DruidDataSource

    initialSize: 5

​ 自定义一个配置类

@Configuration
public class DruidConfig {
    @ConfigurationProperties(prefix = "spring.datasource")
    @Bean
    public DataSource druidDataSource() {
        return new DruidDataSource();
    }
}
  • 添加druid 监控功能
@Configuration
public class DruidConfig {
    @ConfigurationProperties(prefix = "spring.datasource")
    @Bean
    public DataSource druidDataSource() {
        return new DruidDataSource();
    }

    // 配置Druid 监控
    // 配置一个管理后台的servlet
    @Bean
    public ServletRegistrationBean statViewServlet() {
        ServletRegistrationBean bean = new ServletRegistrationBean(new StatViewServlet(), "/druid/*");
        Map<String, String> initMap = new HashMap<>();
        initMap.put("loginUsername", "admin");
        initMap.put("loginPassword", "123456");
        bean.setInitParameters(initMap);
        return bean;
    }

    //配置一个web监控filter
    @Bean
    public FilterRegistrationBean webStatFilter() {
        FilterRegistrationBean bean = new FilterRegistrationBean();
        Map<String, String> initMap = new HashMap<>();
        initMap.put("exclusions", "*.js,*.css,/druid/*");
        bean.setInitParameters(initMap);

        bean.setFilter(new WebStatFilter());

        bean.setUrlPatterns(Arrays.asList("/*"));
        return bean;
    }

}

访问http://localhost:8080/druid 即可查看监控

在这里插入图片描述

  1. 整合mybatis
  • 加入依赖
<!-- https://mvnrepository.com/artifact/org.mybatis.spring.boot/mybatis-spring-boot-starter -->
<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>1.3.1</version>
</dependency>

  • 第一种方式,sql语句写在注解中
@Mapper
public interface TestMapper {
    @select("select * from test_table where id = #{id}")
    public Person getPersonById(Integer id);
}

自动配置原理:

@Configuration
@ConditionalOnClass({SqlSessionFactory.class, SqlSessionFactoryBean.class})
@ConditionalOnBean({DataSource.class})
@EnableConfigurationProperties({MybatisProperties.class})
@AutoConfigureAfter({DataSourceAutoConfiguration.class})
public class MybatisAutoConfiguration {
    private static final Logger logger = LoggerFactory.getLogger(MybatisAutoConfiguration.class);
    private final MybatisProperties properties;
    private final Interceptor[] interceptors;
    private final ResourceLoader resourceLoader;
    private final DatabaseIdProvider databaseIdProvider;
    private final List<ConfigurationCustomizer> configurationCustomizers;

    public MybatisAutoConfiguration(MybatisProperties properties, ObjectProvider<Interceptor[]> interceptorsProvider, ResourceLoader resourceLoader, ObjectProvider<DatabaseIdProvider> databaseIdProvider, ObjectProvider<List<ConfigurationCustomizer>> configurationCustomizersProvider) {
        this.properties = properties;
        this.interceptors = (Interceptor[])interceptorsProvider.getIfAvailable();
        this.resourceLoader = resourceLoader;
        this.databaseIdProvider = (DatabaseIdProvider)databaseIdProvider.getIfAvailable();
        this.configurationCustomizers = (List)configurationCustomizersProvider.getIfAvailable();
    }

SqlSessionFactory 声明在MybatisAutoConfiguration 中,MybatisProperties 对应配置文件,在MybatisProperties中可以看到它会读取前缀为"mybatis" 的配置

这种方式,可以通过声明一个ConfigrationCustomizer 来完成全局配置,如开启驼峰命名法

Mapper 很多的时候可以使用,@MapperScan 注解来扫描

  • 第二种方式,使用配置文件

在配置文件中加入前缀为"mybatis" 的配置即可,config-location 指定全局配置文件的位置,mapper-location 指定映射文件的位置

猜你喜欢

转载自blog.csdn.net/u013738122/article/details/84955873