当前位置: 首页 > news >正文

温州建网站哪家强涉及部署未备案网站

温州建网站哪家强,涉及部署未备案网站,免费生产管理erp,怎么样在网站做产品推广以下是 Spring Boot 中 JdbcTemplate 处理枚举类型转换 和 减少数据库连接的方法 的详细说明,包含代码示例和关键要点: 一、JdbcTemplate 处理枚举类型转换 1. 场景说明 假设数据库存储的是枚举的 String 或 int 值,但 Java 实体类使用 enu…

以下是 Spring Boot 中 JdbcTemplate 处理枚举类型转换减少数据库连接的方法 的详细说明,包含代码示例和关键要点:


一、JdbcTemplate 处理枚举类型转换

1. 场景说明

假设数据库存储的是枚举的 Stringint 值,但 Java 实体类使用 enum 类型。例如:

public enum Status {ACTIVE, INACTIVE, PENDING
}public class User {private Long id;private Status status; // 数据库字段存储为 "ACTIVE" 或 "INACTIVE"
}
2. 方法 1:自定义 RowMapper

手动将数据库字段值转换为枚举:

public class UserRowMapper implements RowMapper<User> {@Overridepublic User mapRow(ResultSet rs, int rowNum) throws SQLException {Status status = Status.valueOf(rs.getString("status")); // 字符串转枚举return new User(rs.getLong("id"), status);}
}
3. 方法 2:使用 BeanPropertyRowMapper + 自定义转换器

通过 ConversionService 自动转换:

// 配置 ConversionService
@Configuration
public class AppConfig implements WebMvcConfigurer {@Overridepublic void addFormatters(FormatterRegistry registry) {registry.addConverter(String.class, Status.class, source -> Status.valueOf(source));}
}// 使用 BeanPropertyRowMapper
List<User> users = jdbcTemplate.query("SELECT * FROM users",BeanPropertyRowMapper.newInstance(User.class)
);
4. 方法 3:使用 @Enumerated 注解(需结合 ORM)

若使用 JPA/Hibernate,可通过 @Enumerated 注解自动转换,但需注意 JdbcTemplate 不直接支持此注解。需配合自定义转换逻辑。


二、减少数据库连接的方法

1. 优化连接池配置

Spring Boot 默认使用 HikariCP 连接池,通过调整参数控制连接数:

# application.properties
# 降低最大连接数(根据实际需求调整)
spring.datasource.hikari.maximum-pool-size=10
# 设置空闲连接超时(单位:毫秒)
spring.datasource.hikari.idle-timeout=30000
# 缩短连接获取超时时间
spring.datasource.hikari.connection-timeout=2000
2. 使用连接池监控

通过 HikariPoolMXBean 监控连接池状态:

@Bean
public HikariPoolMXBean hikariPoolMXBean(DataSource dataSource) {return ((HikariDataSource) dataSource).getHikariPoolMXBean();
}// 示例:获取当前活跃连接数
public void checkConnections() {HikariPoolMXBean pool = ...; // 通过注入获取System.out.println("Active Connections: " + pool.getActiveConnections());
}
3. 优化 SQL 查询
  • 避免 N+1 查询:使用 JOIN 或批量查询减少数据库调用。
  • 索引优化:确保查询字段有索引,减少查询时间。
  • 分页查询:限制 SELECT 的返回行数(如 LIMIT 100)。
4. 缓存策略
  • 一级缓存:JDBC 驱动自带的查询缓存(如 MySQL 的 query_cache,但需注意并发问题)。
  • 二级缓存:使用 Redis 或 Caffeine 缓存频繁查询的数据:
    @Service
    public class UserService {@Autowiredprivate JdbcTemplate jdbcTemplate;@Autowiredprivate CacheManager cacheManager;public User getUserById(Long id) {String key = "user:" + id;return (User) cacheManager.getCache("users").get(key, () -> {// 查询数据库并缓存结果return jdbcTemplate.queryForObject("SELECT * FROM users WHERE id = ?",new Object[]{id},new UserRowMapper());});}
    }
    
5. 连接复用与资源管理
  • 使用 try-with-resources:确保 ResultSetConnection 及时关闭:
    try (Connection conn = dataSource.getConnection()) {// 执行查询
    } catch (SQLException e) {throw new RuntimeException(e);
    }
    
6. 异步查询

通过 CompletableFuture 异步执行查询,释放线程资源:

public CompletableFuture<User> findUserAsync(Long id) {return CompletableFuture.supplyAsync(() -> jdbcTemplate.queryForObject("SELECT * FROM users WHERE id = ?",new Object[]{id},new UserRowMapper()),Executors.newFixedThreadPool(5));
}

三、关键对比表格

方法适用场景优点缺点
自定义 RowMapper需要手动控制枚举转换灵活,完全可控代码冗余,需为每个字段编写转换逻辑
BeanPropertyRowMapper列名与属性名一致,使用转换器简单,减少代码量需配置 ConversionService
HikariCP 配置优化控制连接池大小和超时直接减少连接数,降低资源占用需根据负载调整参数,可能影响性能
连接池监控动态调整连接池配置实时监控连接状态,快速发现瓶颈需额外开发监控逻辑
SQL 优化减少查询次数或执行时间显著降低数据库负载需深入分析 SQL 和索引
缓存策略频繁查询且数据不频繁变化减少数据库访问次数需管理缓存失效,可能引入一致性问题
异步查询高并发场景,需释放线程资源提升吞吐量增加复杂度,需处理异步结果

四、注意事项

  1. 枚举转换

    • 确保数据库字段值与枚举常量名称完全一致(或通过转换器处理差异)。
    • 避免在 RowMapper 中抛出未处理的异常,需捕获 SQLException
  2. 连接池配置

    • 根据服务器资源和 QPS 合理设置 maximum-pool-size,避免过大导致数据库负载过高。
    • 监控 activeidle 连接数,及时发现泄漏。
  3. 缓存

    • 对于频繁更新的数据,需设置合理的过期时间或失效策略。
    • 使用分布式缓存(如 Redis)避免单点故障。

五、总结

通过 自定义 RowMapperConversionService 可以优雅地处理枚举类型转换,而 优化连接池配置、SQL 查询和引入缓存 是减少数据库连接的核心策略。根据具体场景选择合适的方法,平衡性能与资源消耗。

http://www.dtcms.com/a/494091.html

相关文章:

  • 网站建设需要云主机吗wordpress 4.2.2
  • 网站备案证书如何打开如何免费申请域名和网址
  • 网站网速慢程序员培训学校
  • 专业建设网站公司哪家好设计官网论坛
  • 个人网站也要备案吗高端网站建设1
  • 阿里云建网站教程那些做黑网站的都是团体还是个人
  • wordpress做定制T恤的网站自己做的手机网站怎么加入小程序
  • 快速网站建设公司ktv网站建设方案
  • 怎样做自己的的社交网站定制建站
  • 网站制作的收费标准wordpress切换作者
  • 南京高端网站制作公司wordpress 外教 缩略图
  • 做网站网站会被判多久食品品牌网站策划
  • 彩票网站维护会跑路吗电子商务网站建设书
  • 2019为网站网站做代理被判缓刑佛山市住房和城乡建设局网站
  • 网站建设龙华瑞安微信网站
  • 托管的服务器如何做网站网站服务种类
  • 大连网站建设选高合科技网站模板 整站源码
  • 网站的设计与应用论文装饰公司网站如何布局
  • flash中文网站模板学做淘宝客网站有哪些
  • 网络公司网站策划书前端和后端哪个累
  • 邯郸制作网站的公司ps做图网站
  • 网站建设花都區龙岩网站建设哪里比较好
  • 惠州seo网站排名网站开发费应该入什么科目
  • 做乒乓球网站的图片大全家具设计软件有哪些
  • 武山建设局网站wordpress首页div
  • 山东省建设部网站网站建设的系统设计
  • 网站上传空间的ip地址吗做网站用的插件
  • 嘉兴网站制作网页12306网站开发成本
  • 团购产品 网站建设赣州市赣县区建设局网站
  • 迈创网站建设上海市最新消息今天