JPA,QueryDSL,手动配置数据源DataSource,org.hibernate.exception.GenericJDBCException: could not prepare state

解决方案:


	/**
     * 自定义数据源
     **/
    @Bean(name = "customDataSource")
    @Primary
    @ConfigurationProperties(prefix = "spring.datasource.hikari.custom")
    public HikariDataSource customDataSource() {
        return new HikariDataSource();
    }

    /**
     * 配置 组合jpaProperties和hibernateProperties配置的map对象
     * @return 组合jpaProperties和hibernateProperties配置的map
     */
    @Bean
    public Map<String, Object> vendorProperties() {
        return hibernateProperties.determineHibernateProperties(jpaProperties.getProperties(), new HibernateSettings());
    }


       /**
     * 配置数据源实体管理器
     *
     * @param builder EntityManagerFactoryBuilder
     * @return EntityManager
     */
    @Bean(name = "customEntityManager")
    @Primary
    public EntityManager entityManagerReport(EntityManagerFactoryBuilder builder) {
        return builder.dataSource(customDataSource)
                //指定组合jpaProperties和hibernateProperties配置的map对象
                .properties(vendorProperties)
                //指定该数据源的实体类所在包路径
                .packages("com.j5code.entity")
                .persistenceUnit("persistenceUnit")
                .build().getObject().createEntityManager();
    }

    /**
     * 配置JPAQueryFactory
     **/
    @Bean(name = "customJPAQueryFactory")
    public JPAQueryFactory jpaQueryFactory(@Qualifier("customEntityManager") EntityManager entityManager) {
        return new JPAQueryFactory(() -> {
            Session session = entityManager.unwrap(Session.class);
            try {
                //执行mysql验证数据连接语句
                session.createSQLQuery("SELECT 1").uniqueResult();
                return session;
            } catch (Exception e) {
                LOGGER.error("查询数据库出错,数据库连接存在问题:{}", e.getMessage());
                Connection disconnect = session.disconnect();
                if (Objects.nonNull(disconnect)) {
                    try {
                        disconnect.close();
                    } catch (SQLException ex) {
                        LOGGER.error("连接关闭异常:{}", ex.getMessage());
                    }
                }
            }
            return entityManager.unwrap(Session.class);
        });
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值