如何跨项目配置多个数据源

时间:2014-07-06 09:47:56

标签: java spring spring-data

我正在寻找使用Spring Boot和Spring Data(RELEASE 1.1.3)围绕静态数据源(从第三方获得)构建应用程序,这将有效地提供围绕所述数据的API,从中我可以构建一个前端,但也可以作为依赖项包含在其他项目中(以提供对静态数据的访问)我已经设法使用@RepositoryRestResource注释来实现API部分,但我正在与后者进行斗争。 / p>

示例类: 项目实体

@Entity
@Table(name = "invTypes")
public class Item {


  @Id
  @GeneratedValue(strategy = GenerationType.IDENTITY)
  @Column(name = "typeID", nullable = false)
  private int id;

  @Column(name = "typeName")
  private String name;

  //Remainder ommitted
}

ItemDao

@RepositoryRestResource(collectionResourceRel = "items", path = "items")
public interface ItemDao extends PagingAndSortingRepository<Item, Integer> {

  Item findById(@Param("id") int id);

  Item findByName(@Param("name") String name);

  List<Item> findByNameContains(@Param("name") String name);
}

基本上我想把它打包成一个jar用于另一个项目,这样我就可以配置2个数据库(一个是静态数据源,另一个是与新项目相关)

我设法打包静态数据项目并将其作为依赖项包含在另一个pom.xml中,但是由于新项目还使用数据库,导入的静态数据jar默认为新的数据库配置项目。这会导致如下错误:

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxException: Table 'new_project.invtypes' doesn't exist

(这是因为新项目配置为使用&#39; new_project&#39;数据库,以及配置为使用Hibernates ImprovedNamingStrategy)

一位同事提到在新项目的application.properties中配置这两个数据库 - 但是我对这种方法没有多少好运。我已经尝试更改spring接收的静态项目的数据源属性的前缀,以便可以配置两个数据库(使用此处的指南:http://xantorohara.blogspot.co.uk/2013/11/spring-boot-jdbc-with-multiple.html),但是看起来这两个项目使用相同的数据源(如果我认为这一切都错了,我道歉)

然后静态项目的配置变为:

@Configuration
@ConfigurationProperties(prefix = "spring.ds_static")
class DataSourceConfig extends TomcatDataSourceConfiguration {
  @Bean(name = "dsStatic")
  public DataSource dataSource() {
    return super.dataSource();
  }

  @Bean(name = "jdbcStatic")
  public JdbcTemplate jdbcTemplate(DataSource dsStatic) {
    return new JdbcTemplate(dsStatic);
  }
}

上述方法的属性最终变为,但导致与以前相同的错误:

# Configured properties for the new project
spring.datasource.url=jdbc:mysql://localhost/new_projct
spring.datasource.username=dbuser
spring.datasource.password=password
spring.datasource.driverClassName=com.mysql.jdbc.Driver
spring.jpa.show-sql=true
spring.jpa.hibernate.naming_strategy=org.hibernate.cfg.ImprovedNamingStrategy

# Configured properties for the static data jar
spring.ds_static.url=jdbc:mysql://localhost/static_data
spring.ds_static.username=dbuser
spring.ds_static.password=password
spring.ds_static.driverClassName=com.mysql.jdbc.Driver

如何包含和配置jar以连接到它自己的数据库而不是包含它作为依赖项的项目数据库?我是否需要在静态数据项目中执行某些配置以强制它连接到我决定的数据源?

感谢您的帮助,如果您需要额外的信息我很乐意提供

1 个答案:

答案 0 :(得分:0)

看起来您需要“静态”jar中的自定义实体管理器工厂(例如,请参阅docs here)以及您的自定义数据源。拥有自定义实体管理器工厂后,您需要声明@EnableJpaRepositories并显式引用实体管理器因子的bean ID。