第一次使用springboot整合mybatis-flex,想配置一下常规配置比如不打印banner,修改数据库的方言(默认是mysql),开启或关闭二级缓存(默认开启),不打印sql日志等等,然后在application.yaml中配置都不起作用,最后看了一下源码 ,可以在使用@Configuration配置,现在记录一下:
package com.chhuang.web.config;
import com.chhuang.core.config.UUIDKeyGenerator;
import com.mybatisflex.core.FlexGlobalConfig;
import com.mybatisflex.core.audit.AuditManager;
import com.mybatisflex.core.dialect.DbType;
import com.mybatisflex.core.keygen.KeyGeneratorFactory;
import com.mybatisflex.core.mybatis.FlexConfiguration;
import com.mybatisflex.spring.boot.ConfigurationCustomizer;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.annotation.Configuration;
/**
*
* @Description MyBatisFlex配置 注册自定义主键 审计 缓存 SQL日志打印
* @Author Darren Huang
* @Date 2023-05-11 8:37
*/
@Configuration
public class MyBatisFlexConfiguration implements ConfigurationCustomizer {
private static final Logger logger = LoggerFactory.getLogger("mybatis-flex-sql");
public MyBatisFlexConfiguration() {
//配置mybatis-flex全局配置
FlexGlobalConfig defaultConfig = FlexGlobalConfig.getDefaultConfig();
defaultConfig.setPrintBanner(false);//不打印banner
defaultConfig.setDbType(DbType.POSTGRE_SQL);//数据库方言
//注册自定义主键
KeyGeneratorFactory.register("uuid", new UUIDKeyGenerator());
//开启审计功能
AuditManager.setAuditEnable(true);
//设置 SQL 审计收集器
AuditManager.setMessageCollector(auditMessage ->
logger.info("{},{}ms", auditMessage.getFullSql(), auditMessage.getElapsedTime())
);
}
/**
* 自定义的FlexConfiguration配置
* @param flexConfiguration
*/
@Override
public void customize(FlexConfiguration flexConfiguration) {
// flexConfiguration.setCacheEnabled(false);//开启或关闭mybatis二级缓存
// flexConfiguration.setLogImpl(NoLoggingImpl.class);//是否打印sql日志 StdOutImpl.class打印日志 NoLoggingImpl.class不打日志
}
}
解释一下,FlexGlobalConfig是全局的配置参数,可以通过获取默认配置参数来修改FlexGlobalConfig.getDefaultConfig()。
FlexConfiguration的配置参数可以通过实现ConfigurationCustomizer接口的customize()自定义方法来修改。
然后还配置了数据库主键id的uuid方法,默认KeyType没有uuid的功能,要自己写。然后就是开启审计可以打印出sql执行了多少时间。
其实配置请大家自己参考源码,官网文档有点少,而且也不是很新。
另外官网上表示写好一个account实体类会自动生成一个ACCOUNT类直接用,其实生成的ACCOUNT是在Table类中,要用Table.ACCOUNT才能用,还是看源码比文档正确。
Flex很不错,加油