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 指定映射文件的位置

Spring Boot中使用MyBatis时,默认情况下是没有开启级缓存的。要开启级缓存,可以通过在全局配置文件(mybatis-config.xml)中进行配置,或者在application.yml文件中进行配置。 级缓存是指在mapper-namespace级别的缓存,它可以提高查询性能,避免频繁地访问数据库。一级缓存是指在session级别的缓存,它默认是开启的,而且无法关闭。 要开启MyBatis的级缓存,你可以在全局配置文件(mybatis-config.xml)中添加以下配置: ``` <configuration> <settings> <setting name="cacheEnabled" value="true" /> </settings> </configuration> ``` 或者在application.yml文件中添加以下配置: ``` mybatis: configuration: cache-enabled: true ``` 这样就可以开启MyBatis的级缓存了。注意,开启级缓存后,需要在Mapper接口的方法上使用@CacheNamespace注解来启用缓存。同时,还需要确保你的实体类实现了Serializable接口,以便支持缓存的序列化和反序列化操作。 总结起来,Spring Boot默认情况下是没有开启MyBatis级缓存的,你需要进行相应的配置来启用级缓存,并在Mapper接口的方法上使用@CacheNamespace注解来启用缓存。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [springboot-mybatis之级缓存(注解方式)-随手记](https://blog.csdn.net/luning95/article/details/97756669)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [springboot+mybatis+redis 级缓存问题实例详解](https://download.csdn.net/download/weixin_38618315/12767315)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值