我无法配置如何使用Spring引导连接到多个架构。到目前为止,有了Spring 4和XML配置,我只能把数据库URL放在如下位置:jdbc:mysql://180.179.57.114:3306/?zeroDateTimeBehavior=convertToNull
,并在实体类中指定要使用的模式,从而能够连接到多个模式。
然而,使用Spring Boot,我无法实现同样的效果。如果在应用中。属性我只指定JDBC URL而不指定它给出的模式错误:
未选择数据库
即使我已经在实体类中指定了模式名称。请建议如何在Spring Boot中实现同样的效果?谢谢
以下是您可以使用的代码:
public static SessionFactory buildSessionFactory(DatabaseData dbData) {
SessionFactory sessionFactory = null;
try {
if (dbData != null) {
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName(dbData.getDataSourceDriver());
dataSource.setUrl("jdbc:mysql://" + dbData.getDatabaseIP() + ":" + dbData.getDatabasePort() + "/" + dbData.getDatabaseSchema()
+ "?autoReconnect=true&useSSL=false");
dataSource.setUsername(dbData.getDatabaseUserName());
dataSource.setPassword(dbData.getDatabasePassword());
LocalSessionFactoryBean sessionFactoryBean = new LocalSessionFactoryBean();
sessionFactoryBean.setDataSource(dataSource);
Properties hibernateProperties = new Properties();
hibernateProperties.put("hibernate.show_sql", false);
sessionFactoryBean.setHibernateProperties(hibernateProperties);
sessionFactoryBean.setPackagesToScan("com.***.***.entity");
sessionFactoryBean.afterPropertiesSet();
return sessionFactoryBean.getObject();
}
} catch (Exception ex) {
logger.error("Initial SessionFactory creation failed.", ex);
ex.printStackTrace();
throw new ExceptionInInitializerError(ex);
}
return sessionFactory;
}
其中,DatabaseData类指定如下:
@Data
public class DatabaseData {
private String databaseIP;
private String databasePort;
private String databaseName;
private String databaseSchema;
private String databaseUserName;
private String databasePassword;
private String dataSourceDriver;
private int timeout;
}
对于数据库中的每个模式,可以通过从属性文件或任何其他程序读取属性来创建此类的对象。我希望这能解决你的问题。
您可以在应用程序中配置多个数据源。属性文件,并在实体类中使用适当的数据源。因为示例已经在下面提到的链接中,所以我直接指向相同的链接。请参考下面的链接,检查它是否解决了您的问题:
https://www.ccampo.me/java/spring/2016/02/13/multi-datasource-spring-boot.html
基本上,它指定的是您可以配置多个数据源,并在实体中指定所需的数据源
#first db
spring.datasource.url = [url]
spring.datasource.username = [username]
spring.datasource.password = [password]
spring.datasource.driverClassName = oracle.jdbc.OracleDriver
#second db ...
spring.secondDatasource.url = [url]
spring.secondDatasource.username = [username]
spring.secondDatasource.password = [password]
spring.secondDatasource.driverClassName = oracle.jdbc.OracleDriver
它之所以说“未选择数据库”,是因为您在端口号后面加了正斜杠。这应该有用。。。
jdbc:mysql://180.179.57.114:3306?zeroDateTimeBehavior=convertToNull
我花了很多时间让Hibernate使用一个MySQL实例和多个模式。
我最终将我的连接指定为:
jdbc:mysql://localhost:3306/schema1?useSSL=false&useUnicode=yes&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull
以及我的实体:
@Entity
@Table(name="table1", schema="schema1", catalog="schema1")
public class Table1 {
@Id
private int id;
}
@Entity
@Table(name="table2", schema="schema2", catalog="schema2")
public class Table2 {
@Id
private int id;
}
显然,JDBC将MySQL模式视为目录。我在没有指定模式的情况下尝试了上面的方法,并且效果很好,但是对于集成测试,我使用的是HSQL,所以我将模式保留在@Table定义中。
希望这能帮助到某人。
问题内容: 我从来没有做过这样的PHP / MYSQL技巧来加入多表。请具有该领域经验的人员帮助: TICKETS 表中的字段: 表 RECEPTS中的 字段: 表 PAYMENTS中的 字段: 表 CUSTOMERS中的 字段: 表之间的关系很容易理解: 我希望达到的最终结果: 我试图做这样的事情,但在某个地方出错: 问题答案: 您应该可以使用以下方法获得结果: 参见带有演示的SQL Fiddl
该查询占用了tmp目录中的3GB+并最终超时。我这里少了点什么,怎样才能提高效率?我在这里的目标只是添加到现有查询中,以便从额外的表(j25_mt_cfvalues)中获取值。 : j25_mt_cats模式:
我拉出了mysql docker映像,并用命令运行容器: 此时,springBoot在本地工作。它与MySQL连接: 现在,我希望springBoot应用程序也在单独的docker容器上,在同一服务器上。为此,我使用了DockerFile: 同样,它无法连接到数据库:
我是使用节点js(ws库)开发的网页登录服务器 我想将聊天模块添加到android应用程序。我正在为websocket客户端使用okhttp。当从设备连接时,它正在工作。但是当连接第二台设备时,它不工作。只有第一台设备websocket.on(“消息”)事件发射器会做出响应。另一台设备不监听onMessage。只有一台设备监听A. B- 如何配置onMessage在所有设备上工作? java客户端
本文向大家介绍springboot配置mysql连接的实例代码,包括了springboot配置mysql连接的实例代码的使用技巧和注意事项,需要的朋友参考一下 一:导入pmo.xm配置包 mysql库连接、druid连接池、mybatis组件 配置扫描文件 二:application.yml文件配置 三:编写dao层接口 使用注解:@Mapper 四:编写xml文件sql语句 到此这篇关于spri
它重复显示每个房间类型的酒店名称匹配该酒店id,但我想显示所有房间类型的酒店名称一次。我怎样才能做到这一点? 谢谢。