在Spring Boot中为没有实体类的实体管理器配置两个数据库

问题描述 投票:0回答:1

我从

spring boot
连接 db2 数据库并使用实体管理器调用存储过程。我的应用程序中没有任何实体类。我刚刚使用实体管理器引用调用存储过程。

这里是application.properties

#DB2 dev database config
spring.datasource.url=jdbc:db2://server_nameXXX
spring.datasource.username=my_username
spring.datasource.password=my_password

我的 Dao 课程是

EntityManager entityManager;
    @Autowired
    public SalesCloseEstimateDaoImpl(EntityManager entityManager){
        this.entityManager = entityManager;
    }
   -----------------
    StoredProcedureQuery procedureQuery =  entityManager.createStoredProcedureQuery(StoredProcedureName);

这里我没有使用任何实体类。现在我需要再连接一台ms sql server,那么如何连接呢?我已经搜索过,但所有配置都有实体类使用,如何在没有实体类的情况下编写此配置?

java spring spring-boot jpa
1个回答
0
投票

如果您只调用存储过程,则无需在应用程序中拥有实体管理器,我也遇到了同样的问题,所以我以这种方式进行管理:

  1. 添加依赖并删除jpa和hibernate依赖:

    org.springframework.boot spring-boot-starter-jdbc
  2. 创建数据源文件配置:DataSourceConfiguration.java

@配置 公共类数据源配置{

    @Bean
    @ConfigurationProperties(prefix = "spring.datasource.db1")
    public DataSource bd1DataSource() {
        return DataSourceBuilder.create().build();
    }

    @Bean
    @ConfigurationProperties(prefix = "spring.datasource.db2")
    public DataSource db2DataSource() {
        return DataSourceBuilder.create().build();
    }

    @Bean
    public Map<String, JdbcTemplate> jdbcTemplateMap() {
        Map<String, JdbcTemplate> jdbcTemplateMap = new HashMap<>();
        jdbcTemplateMap.put("bd1DataSource", new JdbcTemplate(bd1DataSource()));
        jdbcTemplateMap.put("bd1DataSource", new JdbcTemplate(bd1DataSource()));
        return jdbcTemplateMap;
    }

}
  1. 创建您的“存储库”:

    @组件@Slf4j 公共类 DB1Repository {

    私有最终Map jdbcTemplateMap;

    公共 DB1Repository(Map jdbcTemplateMap) { this.jdbcTemplateMap = jdbcTemplateMap; }

    public YourClass callSP(int id){ 字符串 storeProcedure = "USE [BD] “ + // “执行[dbo]。[store_procedure] @id”;

     storeProcedure = storeProcedure.replace("@id", String.valueOf(id));
     YourClass yourClass = new YourClass();
    
     jdbcTemplateMap.get("db1").execute(storeProcedure, (PreparedStatementCallback<Object>) preparedStatement -> {
         preparedStatement.execute();
         ResultSet resultSet = preparedStatement.getResultSet();
         while (resultSet.next()) {
             yourClass.setId(resultSet.getInt("id"));
             yourClass.setName(resultSet.getInt("name"));
         }
     return yourClass;
     });
     return yourClass;
    

    } }

  2. 创建对 db2 的下一个“存储库”引用,仅此而已!

© www.soinside.com 2019 - 2024. All rights reserved.