spring开发,当需要读取数据库配置表时,而且有很多出地方用到。不适用传参的方式,怎么设计能查询一次就可通用,无需多次重复查询的优雅代码
时间: 2024-05-08 14:16:29 浏览: 20
一种优雅的实现方式是使用缓存技术将数据库配置表数据缓存起来,避免多次重复查询。可以使用Spring内置的缓存框架,如Ehcache、Redis等,也可以手动实现缓存逻辑。
具体实现步骤如下:
1. 定义一个缓存管理器,并注入到Spring容器中。
```java
@Configuration
@EnableCaching
public class CacheConfig {
@Bean
public CacheManager cacheManager() {
return new EhCacheCacheManager(ehCacheManager());
}
@Bean(destroyMethod = "shutdown")
public EhCacheManagerFactoryBean ehCacheManager() {
EhCacheManagerFactoryBean ehCacheManagerFactoryBean = new EhCacheManagerFactoryBean();
ehCacheManagerFactoryBean.setConfigLocation(new ClassPathResource("ehcache.xml"));
ehCacheManagerFactoryBean.setShared(true);
return ehCacheManagerFactoryBean;
}
}
```
2. 在需要缓存的方法上添加@Cacheable注解,指定缓存名称和缓存Key。
```java
@Service
public class ConfigService {
@Autowired
private ConfigRepository configRepository;
@Cacheable(value = "configCache", key = "#root.targetClass + '.' + #root.methodName")
public List<Config> findAll() {
return configRepository.findAll();
}
}
```
3. 在使用配置表数据的地方,注入ConfigService,并调用findAll()方法获取配置表数据。
```java
@Service
public class UserService {
@Autowired
private ConfigService configService;
public void doSomething() {
List<Config> configs = configService.findAll();
// 使用configs进行操作
}
}
```
这样,第一次调用findAll()方法时,会从数据库中读取配置表数据,并将其缓存起来;之后的调用会直接从缓存中获取数据,避免多次重复查询。如果需要更新配置表数据,可以在更新方法上添加@CacheEvict注解,清空缓存。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)