API调用后如何建立辅助数据库连接?

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

API调用后如何建立辅助数据库连接。目前数据库正在运行时建立连接。

以下是代码示例。 控制器代码:

  @GetMapping("/updateSecondaryDatabase")
    public ResponseEntity<String> updateSecondaryDatabase(@RequestParam Long propertyId) {
                return dashboardService.updateSecondaryDatabaseConnection(propertyId);
    }

实现代码:

public ResponseEntity<String> updateSecondaryDatabaseConnection(Long propertyId) {
      Optional<NetworkConfiguration> configOpt = networkConfigurationRepository
                    .findByPropertyIdAndIsActiveAndIsDelete(propertyId, true, false);
            if (configOpt.isPresent()) {
                NetworkConfiguration config = configOpt.get();
                String dbUrl = "jdbc:mysql://" + config.getIpAddress() + config.getDbName()
                        + "?useSSL=false&useUnicode=true&characterEncoding=utf-8";
                String dbUser = config.getDbUser();
                String dbPassword = config.getDbPassword();
                return ResponseEntity.ok("Database connection updated successfully.");
            } else {
                System.err.println("No configuration found for propertyId: " + propertyId);
                return ResponseEntity.status(404).body("No configuration found for propertyId: " + propertyId);
            }
        }

在这里我们得到了所有响应数据。

辅助数据库连接代码:

package com.wairport.app.config;

import javax.persistence.EntityManagerFactory;
import javax.sql.DataSource;

import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.orm.jpa.EntityManagerFactoryBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
import org.springframework.orm.jpa.JpaTransactionManager;
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
import org.springframework.transaction.PlatformTransactionManager;

@Configuration
@EnableJpaRepositories(
        basePackages = "com.wairport.app.secondary.repository",
        entityManagerFactoryRef = "secondEntityManagerFactory",
        transactionManagerRef = "secondTransactionManager"
)
public class SecondDataSourceConfig {

    @Bean(name = "secondDataSource")
    public DataSource secondDataSource() {
        DriverManagerDataSource dataSource = new DriverManagerDataSource();
        dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver"); // Updated
        dataSource.setUrl("jdbc:mysql://localhost:3306/radius?useSSL=false&useUnicode=true&characterEncoding=utf-8"); // Ensure this URL is correct
        dataSource.setUsername("root");
        dataSource.setPassword("root123");
        return dataSource;
    }

    @Bean(name = "secondEntityManagerFactory")
    public LocalContainerEntityManagerFactoryBean secondEntityManagerFactory(
            EntityManagerFactoryBuilder builder, @Qualifier("secondDataSource") DataSource dataSource) {
        return builder
                .dataSource(dataSource)
                .packages("com.wairport.app.secondary.model") // Ensure this is the correct package for your secondary entities
                .persistenceUnit("second")
                .build();
    }

    @Bean(name = "secondTransactionManager")
    public PlatformTransactionManager secondTransactionManager(
            @Qualifier("secondEntityManagerFactory") EntityManagerFactory secondEntityManagerFactory) {
        return new JpaTransactionManager(secondEntityManagerFactory);
    }
}

这是辅助数据库连接代码。此连接应在 api 调用后建立,我得到的响应是什么应该在 dburl 中传递,例如 dbname 、url、dbusername 和 dbpassowrd 。当前连接正在运行时建立。

我能找到解决方案吗?

谢谢你。

java spring spring-boot maven java-8
1个回答
0
投票

我认为这是可能的,但有一些限制,你可以这样做:

@RestController
public class DynamicDataSourceController {

    @Autowired
    private DynamicDataSourceService dynamicDataSourceService;

    @PostMapping("/create-connection")
    public ResponseEntity<String> createConnection(@RequestBody DbConnectionRequest request) {
        dynamicDataSourceService.createDataSource(request.getUrl(), request.getUsername(), request.getPassword());
        // Use the dataSource as needed
        return ResponseEntity.ok("Connection created successfully");
    }
}

@Service
public class DynamicDataSourceService {

    private DataSource dataSource;

    public void createDataSource(String url, String username, String password) {
        dataSource = DataSourceBuilder.create()
                .url(url)
                .username(username)
                .password(password)
                .build();
    }

    public DataSource getDataSource() {
        return this.dataSource;
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.