如何在Spring中使用2个或更多数据库?

我有一个运行Spring MVC的应用程序。

我需要它来访问我的应用程序中的2个不同的数据库(一个是PostgreSQL,另一个是MySQL数据库)。

如何仅使用批注或application.properties文件进行配置?

回答:

这是示例代码,希望multiple Database/datasource对你有所Spring-Boot帮助!

application.properties

spring.ds_items.driverClassName=org.postgresql.Driver 

spring.ds_items.url=jdbc:postgresql://srv0/test

spring.ds_items.username=test0

spring.ds_items.password=test0

spring.ds_users.driverClassName=org.postgresql.Driver

spring.ds_users.url=jdbc:postgresql://srv1/test

spring.ds_users.username=test1

spring.ds_users.password=test1

DatabaseItemsConfig.java

package sb; 

import org.springframework.boot.autoconfigure.jdbc.TomcatDataSourceConfiguration;

import org.springframework.boot.context.properties.ConfigurationProperties;

import org.springframework.context.annotation.Bean;

import org.springframework.context.annotation.Configuration;

import org.springframework.jdbc.core.JdbcTemplate;

import javax.sql.DataSource;

@Configuration

@ConfigurationProperties(name = "spring.ds_items")

public class DatabaseItemsConfig extends TomcatDataSourceConfiguration {

@Bean(name = "dsItems")

public DataSource dataSource() {

return super.dataSource();

}

@Bean(name = "jdbcItems")

public JdbcTemplate jdbcTemplate(DataSource dsItems) {

return new JdbcTemplate(dsItems);

}

}

DatabaseUsersConfig.java

package sb; 

import org.springframework.boot.autoconfigure.jdbc.TomcatDataSourceConfiguration;

import org.springframework.boot.context.properties.ConfigurationProperties;

import org.springframework.context.annotation.Bean;

import org.springframework.context.annotation.Configuration;

import org.springframework.jdbc.core.JdbcTemplate;

import javax.sql.DataSource;

@Configuration

@ConfigurationProperties(name = "spring.ds_users")

public class DatabaseUsersConfig extends TomcatDataSourceConfiguration {

@Bean(name = "dsUsers")

public DataSource dataSource() {

return super.dataSource();

}

@Bean(name = "jdbcUsers")

public JdbcTemplate jdbcTemplate(DataSource dsUsers) {

return new JdbcTemplate(dsUsers);

}

}

ItemRepository.java

package sb; 

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.beans.factory.annotation.Qualifier;

import org.springframework.jdbc.core.JdbcTemplate;

import org.springframework.jdbc.core.RowMapper;

import org.springframework.stereotype.Repository;

import java.sql.ResultSet;

import java.sql.SQLException;

@Repository

public class ItemRepository {

protected final Logger log = LoggerFactory.getLogger(getClass());

@Autowired

@Qualifier("jdbcItems")

protected JdbcTemplate jdbc;

public Item getItem(long id) {

return jdbc.queryForObject("SELECT * FROM sb_item WHERE id=?", itemMapper, id);

}

private static final RowMapper<Item> itemMapper = new RowMapper<Item>() {

public Item mapRow(ResultSet rs, int rowNum) throws SQLException {

Item item = new Item(rs.getLong("id"), rs.getString("title"));

item.price = rs.getDouble("id");

return item;

}

};

}

UserRepository.java

package sb; 

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.beans.factory.annotation.Qualifier;

import org.springframework.jdbc.core.JdbcTemplate;

import org.springframework.jdbc.core.RowMapper;

import org.springframework.stereotype.Repository;

import java.sql.ResultSet;

import java.sql.SQLException;

@Repository

public class UserRepository {

protected final Logger log = LoggerFactory.getLogger(getClass());

@Autowired

@Qualifier("jdbcUsers")

protected JdbcTemplate jdbc;

public User getUser(long id) {

return jdbc.queryForObject("SELECT * FROM sb_user WHERE id=?", userMapper, id);

}

private static final RowMapper<User> userMapper = new RowMapper<User>() {

public User mapRow(ResultSet rs, int rowNum) throws SQLException {

User user = new User(rs.getLong("id"), rs.getString("name"));

user.alias = rs.getString("alias");

return user;

}

};

}

Controller.java

package sb; 

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RequestParam;

import org.springframework.web.bind.annotation.RestController;

@RestController

public class Controller {

protected final Logger log = LoggerFactory.getLogger(getClass());

@Autowired

private UserRepository users;

@Autowired

private ItemRepository items;

@RequestMapping("test")

public String test() {

log.info("Test");

return "OK";

}

@RequestMapping("user")

public User getUser(@RequestParam("id") long id) {

log.info("Get user");

return users.getUser(id);

}

@RequestMapping("item")

public Item getItem(@RequestParam("id") long id) {

log.info("Get item");

return items.getItem(id);

}

}

应用程序

package sb; 

import org.springframework.boot.SpringApplication;

import org.springframework.boot.autoconfigure.EnableAutoConfiguration;

import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;

import org.springframework.context.annotation.ComponentScan;

import org.springframework.context.annotation.Configuration;

@EnableAutoConfiguration(exclude = DataSourceAutoConfiguration.class)

@Configuration

@ComponentScan(basePackages = "sb")

public class Application {

public static void main(String[] args) throws Throwable {

SpringApplication app = new SpringApplication(Application.class);

app.run();

}

}

以上是 如何在Spring中使用2个或更多数据库? 的全部内容, 来源链接: utcz.com/qa/419434.html

回到顶部