@Configuration @EnableConfigurationProperties(DruidProperties.class) public class YamlDynamicDataSourceProvider implements DynamicDataSourceProvider { @Autowired DruidProperties druidProperties; @Override public Map<String, DataSource> loadDataSources() { Map<String, DataSource> ds = new HashMap<>(druidProperties.getDs().size()); try { Map<String, Map<String, String>> map = druidProperties.getDs(); Set<String> keySet = map.keySet(); for (String s : keySet) { DruidDataSource dataSource = (DruidDataSource) DruidDataSourceFactory.createDataSource(map.get(s)); ds.put(s, druidProperties.dataSource(dataSource)); } } catch (Exception e) { e.printStackTrace(); } return ds; }
时间: 2024-04-02 12:33:31 浏览: 81
这是一个实现了 DynamicDataSourceProvider 接口的类,用于加载多个数据源。该类使用了 Spring Boot 的注解 @Configuration 和 @EnableConfigurationProperties(DruidProperties.class),并通过 @Autowired 注解注入了 DruidProperties 类的实例 druidProperties。
该类实现了 loadDataSources() 方法,该方法通过读取 DruidProperties 类中的 ds 属性,即配置文件中配置的多个数据源信息,使用 DruidDataSourceFactory.createDataSource() 方法生成 DruidDataSource 对象,并将其加入到一个 Map 类型的 ds 中。最后返回该 Map 对象,其中 key 为数据源名称,value 为该数据源对应的 DataSource 对象。
通过使用该类,可以实现在运行时动态加载多个数据源,实现多数据源的切换。
相关问题
@Configuration public class WebConfig implements WebMvcConfigurer { @Autowired AuthInterceptor authInterceptor; public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(authInterceptor) .addPathPatterns("/**"); } }
这段代码是一个 Spring Boot 的配置类,用于注册一个名为 "authInterceptor" 的拦截器,并将其应用到所有请求路径上。
具体来说,该拦截器用于进行用户认证(即验证用户身份),在 addPathPatterns() 方法中传入 "/*" 参数表示匹配所有请求路径。因此,对于所有请求,该拦截器都会执行。
需要注意的是,该拦截器需要先被注入到 Spring 容器中才能被使用。在类名上方的 @Configuration 注解表示该类是一个配置类,在应用启动时会被自动加载并创建一个实例,因此可以通过 @Autowired 注解将 authInterceptor 注入到 WebConfig 类中。
@Slf4j @Component @Intercepts({@Signature(type = StatementHandler.class, method = "prepare", args = {Connection.class, Integer.class})}) public class SqlStatsInterceptor implements Interceptor},如何将这个mybatis自定义拦截器注册到bean?
要将这个 MyBatis 自定义拦截器注册为 Bean ,可以使用 MyBatis 提供的 `@Intercepts` 和 `@Component` 注解,以及 Spring Framework 提供的 `@Bean` 注解。具体的步骤如下:
1. 在拦截器类上添加 `@Intercepts` 注解,用于指定拦截哪个方法。
2. 在拦截器类上添加 `@Component` 注解,用于将拦截器类注册为 Spring Bean 。
3. 在配置类中使用 `@Bean` 注解将拦截器类注册为 Bean 。
示例代码如下:
```java
@Intercepts({@Signature(type = StatementHandler.class, method = "prepare", args = {Connection.class, Integer.class})})
@Component
public class SqlStatsInterceptor implements Interceptor {
// 拦截器逻辑代码
}
@Configuration
public class MyBatisConfig {
@Autowired
private SqlStatsInterceptor sqlStatsInterceptor;
@Bean
public SqlSessionFactoryBean sqlSessionFactory(DataSource dataSource) throws Exception {
SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
sessionFactory.setDataSource(dataSource);
// 注册拦截器
sessionFactory.setPlugins(new Interceptor[] { sqlStatsInterceptor });
return sessionFactory;
}
}
```
在上面的示例代码中,`SqlStatsInterceptor` 类使用 `@Intercepts` 和 `@Component` 注解分别指定拦截 `StatementHandler` 接口的 `prepare` 方法,并将拦截器类注册为 Spring Bean 。然后在配置类中使用 `@Bean` 注解将拦截器类注册为 Bean ,并将其添加到 `SqlSessionFactory` 中的拦截器列表中。这样,MyBatis 在创建 `SqlSession` 时就会将该拦截器应用到所有的 SQL 语句中。
阅读全文