当前位置: 首页 > 知识库问答 >
问题:

Spring boot连接mysql中的多个模式

宋伯寅
2023-03-14

我无法配置如何使用Spring引导连接到多个架构。到目前为止,有了Spring 4和XML配置,我只能把数据库URL放在如下位置:jdbc:mysql://180.179.57.114:3306/?zeroDateTimeBehavior=convertToNull,并在实体类中指定要使用的模式,从而能够连接到多个模式。

然而,使用Spring Boot,我无法实现同样的效果。如果在应用中。属性我只指定JDBC URL而不指定它给出的模式错误:

未选择数据库

即使我已经在实体类中指定了模式名称。请建议如何在Spring Boot中实现同样的效果?谢谢

共有3个答案

王宏扬
2023-03-14

以下是您可以使用的代码

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;
}

对于数据库中的每个模式,可以通过从属性文件或任何其他程序读取属性来创建此类的对象。我希望这能解决你的问题。

廉展鹏
2023-03-14

您可以在应用程序中配置多个数据源。属性文件,并在实体类中使用适当的数据源。因为示例已经在下面提到的链接中,所以我直接指向相同的链接。请参考下面的链接,检查它是否解决了您的问题:

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
傅峰
2023-03-14

它之所以说“未选择数据库”,是因为您在端口号后面加了正斜杠。这应该有用。。。

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,但我想显示所有房间类型的酒店名称一次。我怎样才能做到这一点? 谢谢。