星云 ERP
项目简介
下载源码
项目部署
项目模块
liyade-dependencies-common
liyade-dependencies-web-starter
启用缓存机制
实现图片验证码
解决Lettuce连接池超时问题
ImportSelector实战解析
liyade-admin
liyade-settle
liyade-sc
liyade-chart
liyade-basedata
liyade-common
liyade-dependencies-activemq-starter
liyade-core
liyade-template
liyade-dependencies-cloud-starter
liyade-dependencies-mq-starter
liyade-dependencies-websocket-starter
liyade-template-core
liyade-dependencies-web-common
spring.factories
lombok.config
event
lombok.config 文件详解
使用手册
登录功能
系统管理
菜单管理
部门管理
数据库字典
菜单收藏(sys_menu_collect)
库存成本调整单明细(tbl_stock_cost_adjust_sheet_detail)
库存盘点参数设置(tbl_take_stock_config)
库存盘点任务(tbl_take_stock_plan)
库存盘点任务明细(tbl_take_stock_plan_detail)
库存盘点单(tbl_take_stock_sheet)
库存盘点单明细(tbl_take_stock_sheet_detail)
系统参数(sys_parameter)
门店(tbl_shop)
角色与菜单关系表(sys_role_menu)
角色(sys_role)
岗位(sys_position)
库存成本调整单(tbl_stock_cost_adjust_sheet)
菜单(sys_menu)
部门(sys_dept)
商品库存变动记录(tbl_product_stock_log)
商品库存(tbl_product_stock)
商品批次库存(tbl_product_lot_stock)
商品批次(tbl_product_lot)
库存预先盘点单明细(tbl_pre_take_stock_sheet_detail)
库存预先盘点单(tbl_pre_take_stock_sheet)
订单图表数据(tbl_order_chart)
用户绑定手机号表(sys_user_telephone)
零售出库单批次明细(tbl_retail_out_sheet_detail_lot)
采购参数设置(tbl_purchase_config)
采购订单(tbl_purchase_order)
采购订单明细(tbl_purchase_order_detail)
采购退单(tbl_purchase_return)
采购退单明细(tbl_purchase_return_detail)
采购收货单(tbl_receive_sheet)
采购收货单明细(tbl_receive_sheet_detail)
零售参数设置(tbl_retail_config)
零售出库单(tbl_retail_out_sheet)
零售出库单明细(tbl_retail_out_sheet_detail)
用户与角色关系表(sys_user_role)
零售退单(tbl_retail_return)
零售退单明细(tbl_retail_return_detail)
销售参数设置(tbl_sale_config)
销售订单(tbl_sale_order)
销售订单明细(tbl_sale_order_detail)
销售出库单(tbl_sale_out_sheet)
销售出库单明细(tbl_sale_out_sheet_detail)
销售出库单批次明细(tbl_sale_out_sheet_detail_lot)
销售退单(tbl_sale_return)
销售退单明细(tbl_sale_return_detail)
商品零售价(base_data_product_retail)
代码生成基本信息(gen_generate_info)
数据对象列信息(gen_data_object_column)
数据对象(gen_data_object)
新增功能代码生成配置(gen_create_column_config)
地区字典表(dic_city)
供应商(base_data_supplier)
仓库(base_data_store_center)
商品和销售属性值关系表(base_data_product_saleprop_item_relation)
商品销售属性值(base_data_product_saleprop_item)
商品销售属性组(base_data_product_saleprop_group)
商品销售价(base_data_product_sale)
查询功能代码生成配置(gen_query_column_config)
商品采购价(base_data_product_purchase)
商品属性值(base_data_product_property_item)
商品属性(base_data_product_property)
商品SPU和商品属性关系表(base_data_product_poly_property)
商品SPU(base_data_product_poly)
商品类目和商品属性关系表(base_data_product_category_property)
商品类目(base_data_product_category)
商品品牌(base_data_product_brand)
商品(base_data_product)
会员(base_data_member)
收入项目(settle_in_item)
用户与岗位关系表(sys_user_position)
用户与部门关系表(sys_user_dept)
用户(sys_user)
详情功能代码生成配置(gen_detail_column_config)
系统设置(sys_config)
供应商结算单明细(settle_sheet_detail)
供应商结算单(settle_sheet)
供应商预付款单明细(settle_pre_sheet_detail)
供应商预付款单(settle_pre_sheet)
支出项目(settle_out_item)
客户(base_data_customer)
供应商费用单明细(settle_fee_sheet_detail)
供应商费用单(settle_fee_sheet)
供应商对账单明细(settle_check_sheet_detail)
供应商对账单(settle_check_sheet)
树形数据节点关系表(recursion_mapping)
操作日志(op_logs)
修改功能代码生成配置(gen_update_column_config)
数据库单表列信息(gen_simple_table_column)
数据库单表(gen_simple_table)
查询参数功能代码生成配置(gen_query_params_column_config)
-
+
首页
启用缓存机制
## @EnableCaching @EnableCaching 是 Spring Framework 中用于启用和配置缓存机制的一个注解。它通常被应用在配置类上,用来告诉 Spring 容器需要激活缓存相关的功能。Spring 的缓存抽象提供了一种简单的机制来管理缓存,可以减少重复的计算或数据库查询,从而提高应用程序的性能。 ### 使用 @EnableCaching 当你在配置类上使用 @EnableCaching 注解时,Spring 会自动检测并注册所有与缓存相关的 Bean(例如 CacheManager 和 CacheResolver),并且会对带有缓存相关注解的方法进行拦截,如 @Cacheable、@CachePut 和 @CacheEvict。 ### 缓存注解 - @Cacheable:当方法被调用时,Spring 会检查缓存中是否已经存在结果。如果存在,则直接返回缓存的结果,而不执行实际的方法;如果不存在,则执行方法,并将结果存入缓存。 - @CachePut:无论缓存中是否存在数据,都会执行方法,并将方法的结果存入缓存。 - @CacheEvict:用于从缓存中移除数据。可以指定在方法执行前或后移除。 ### 自定义缓存解析器 除了基本的注解外,你还可以自定义 CacheResolver 来决定使用哪个缓存或如何解析缓存键。这可以通过实现 CacheResolver 接口或使用 SimpleCacheResolver 来完成。 ### 配置 CacheManager 为了使缓存工作,你需要配置一个或多个 CacheManager,它们负责创建和管理缓存。Spring 支持多种类型的 CacheManager,比如基于 EhCache、Caffeine、ConcurrentMap 等的实现。你可以通过 Java 配置或者 XML 来定义 CacheManager。 ### 模式选项 @EnableCaching 注解还有一个可选的 mode 属性,它可以接受以下值: - proxy (默认):使用代理的方式来拦截被缓存注解标注的方法。这是最常用的模式,适用于大多数场景。 - aspectj:使用 AspectJ 编译期织入的方式来进行拦截。这种方式可以在不改变字节码的情况下对方法进行拦截,但是需要额外的编译步骤。 ### 注意事项 - @EnableCaching 只有在 Spring 上下文启动时才会生效,因此不能动态地开启或关闭缓存。 - 缓存注解只对公共方法有效。如果你尝试在非公共方法上使用缓存注解,它们将不会起作用。 - 在使用缓存时要考虑到缓存一致性的问题,确保缓存的数据是最新的,以避免出现脏读的情况。 总之,@EnableCaching 是 Spring 提供的一种强大而灵活的工具,可以帮助开发者轻松地添加缓存逻辑到他们的应用程序中。正确配置和使用它能够显著提升应用的响应速度和效率。 ## @EnableConfigurationProperties @EnableConfigurationProperties是Spring Boot中的一个注解,用于显式地启用对@ConfigurationProperties注解类的支持。当你在你的应用中定义了配置属性类(即使用@ConfigurationProperties注解的类),你可以使用@EnableConfigurationProperties注解来告诉Spring Boot自动加载并绑定配置文件(如application.properties或application.yml)中的属性到这些类的字段上。 ### 使用方式 你可以直接在你的配置类或启动类上使用@EnableConfigurationProperties注解,并通过它的value属性指定一个或多个@ConfigurationProperties注解的类。这样,指定的配置属性类会被自动注册为Spring容器中的Bean,并且它们的属性会被自动绑定到配置文件中相应的属性上。 ### 注意事项 总之,@EnableConfigurationProperties注解是Spring Boot提供的一个便利的机制,用于启用和管理配置属性类,使得从外部配置文件中读取配置变得简单和直接。 - 从Spring Boot 2.2版本开始,如果你的配置属性类是以组件(如使用@Component注解)的形式注册的,那么你不需要显式地使用@EnableConfigurationProperties注解。Spring Boot会自动配置这些属性类。 - 使用@EnableConfigurationProperties可以让你的配置属性类保持轻量级,无需添加如@Component这样的Spring组件注解,同时也避免了类路径扫描的开销。 - @EnableConfigurationProperties注解提供了一种集中式的方式来管理和绑定应用的配置属性,使得代码更加清晰和易于维护。 ## @ConfigurationProperties @ConfigurationProperties 的基本用法非常简单:我们为每个要捕获的外部属性提供一个带有字段的类。请注意以下几点: - 前缀定义了哪些外部属性将绑定到类的字段上 - 根据 Spring Boot 宽松的绑定规则,类的属性名称必须与外部属性的名称匹配 - 我们可以简单地用一个值初始化一个字段来定义一个默认值 - 类本身可以是包私有的 - 类的字段必须有公共 setter 方法 > 注意:如果我们不在POJO中使用@Configuration ,那么我们需要在主Spring应用程序类中添加@EnableConfigurationProperties(ConfigProperties.class)以将属性绑定到POJO中 ## 使用示例 第一步:使用 @ConfigurationProperties 注解定义 CacheProperties 类 ``` @Data @ConfigurationProperties(prefix = "jugg.cache") public class CacheProperties { /** * 公共缓存过期时间 */ private Long ttl = 1800L; /** * 特殊指定缓存过期时间 */ private Map<String, Long> regions; } ``` 并在 application.yml 配置文件中添加配置信息 ``` jugg: cache: ttl: 1800 regions: cacheName: 3600 cacheName2: 7200 ``` 第二步:开启缓存 使用 @Configuration 开启缓存 使用 @EnableConfigurationProperties 来告诉Spring Boot自动加载并绑定配置文件(如application.properties或application.yml)中的属性到这些类的字段上。 ``` @Slf4j @Configuration @EnableCaching @EnableConfigurationProperties(CacheProperties.class) public class CacheAutoConfiguration extends CachingConfigurerSupport { @Autowired private RedisTemplate redisTemplate; // getConnectionFactory()方法可以用来获取RedisTemplate使用的ConnectionFactory对象。这个ConnectionFactory是Redis操作的核心组件之一,它负责建立与Redis服务器的连接。 @Bean public RedisCacheWriter writer() { return RedisCacheWriter.nonLockingRedisCacheWriter(redisTemplate.getConnectionFactory()); } @Bean public CacheManager cacheManager(CacheProperties properties) { Map<String, RedisCacheConfiguration> configurationMap = new HashMap<>(); if (!CollectionUtil.isEmpty(properties.getRegions())) { properties.getRegions().forEach((k, v) -> { configurationMap.put(k, RedisCacheConfiguration .defaultCacheConfig().entryTtl(Duration.ofSeconds(v))); }); } return RedisCacheManager.builder(writer()) .initialCacheNames(configurationMap.keySet()) .cacheDefaults(RedisCacheConfiguration.defaultCacheConfig() .entryTtl(Duration.ofSeconds(properties.getTtl()))) .withInitialCacheConfigurations(configurationMap) .build(); } } ```
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
分享
链接
类型
密码
更新密码