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

政府网站建设情况交流汇报营销网站建设

政府网站建设情况交流汇报,营销网站建设,建设网站怎么赚钱,李光辉:营销型企业网站建设的指导思想是什么?以下是 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/wzjs/367300.html

相关文章:

  • html5网站欣赏长沙哪家网络公司做网站好
  • 打开网站 磁盘空间不足淘宝seo优化
  • 公司如何申请一个网站网络推广网络营销软件
  • 网站建设的步骤图片过程站长工具综合查询
  • 凡科2网站需要备案吗长沙seo网络营销推广
  • 主流网站开发百度快照手机版
  • 如何自己做网站并开发软件适合30岁女人的培训班
  • 常用的网站开发语言有哪些广告投放
  • 企业解决方案模板天津优化代理
  • 只有图文的网站如何做关键词优化排名网站
  • wordpress css判断浏览器 分辨率 小于1024 90永州网站seo
  • wordpress批量增加文章seo薪资seo
  • html做的网页怎么变成网站网上如何推广自己的产品
  • 门户网站建设工作情况总结百度联盟个人怎么接广告
  • 购物网站详细设计如何做好网站的推广工作
  • 网站seo优化推推蛙青岛seo推广
  • 如何在国内做网站广州广告公司
  • 临朐整站优化软文案例短篇
  • 北京做网站的网站为什么要seo?
  • 西安医院网站建设网游推广
  • 如何建个人微信公众号优化方案官网电子版
  • 临沂网站建设铭镇体验式营销
  • 河北网站设计成功柚米科技seo营销怎么做
  • 磁县网站设计公司市场营销产品推广策划方案
  • 温州企业网站制作免费网站入口在哪
  • 建设班级网站过程如何自己制作一个网站
  • 福州建站模板厂家广州专业seo公司
  • 做三级分销网站制作百度广告推广费用
  • 自己做营销型网站如何建网址
  • 泰国如何做网站推广安徽网络关键词优化