2015-06-22 227 views
1

我试图让Spring Boot运行多个数据库
我发现How to use 2 or more databases with spring?http://xantorohara.blogspot.com.au/2013/11/spring-boot-jdbc-with-multiple.html已经有帮助。但是,版本1.2.4中不包含类TomcatDataSourceConfiguration。我怎样才能使用更新的版本得到这个工作?Spring Boot多个数据库

编辑:现在我得到的错误No bean named 'entityManagerFactory' is defined

DatabaseConfiguration.java

@Configuration 
@EnableAutoConfiguration 
public class DatabaseConfiguration { 

    @Bean 
    @Primary 
    @ConfigurationProperties(prefix = "spring.weather") 
    public DataSource weatherDataSource() { 
     return DataSourceBuilder.create().build(); 
    } 

    @Bean 
    public LocalContainerEntityManagerFactoryBean weatherManagerFactory(
      EntityManagerFactoryBuilder builder) { 
     return builder 
       .dataSource(weatherDataSource()) 
       .packages(User1.class) 
       .persistenceUnit("user2") 
       .build(); 
    } 

    @Bean 
    @ConfigurationProperties(prefix = "spring.weather_alerts") 
    public DataSource weatherAlertsDataSource() { 
     return DataSourceBuilder.create().build(); 
    } 

    @Bean 
    public LocalContainerEntityManagerFactoryBean weatherAlertsManagerFactory(
      EntityManagerFactoryBuilder builder) { 
     return builder 
       .dataSource(weatherAlertsDataSource()) 
       .packages(User1.class) 
       .persistenceUnit("user1") 
       .build(); 
    } 
} 

User1.java

@Entity 
@Table(name = "users1") 
public class User1 { 

    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private long id; 

    private String name1; 

    public User1() {} 

    public User1(String name1) { 
     this.name1 = name1; 
    } 

    // Getter Setters 

} 

User2.java

@Entity 
@Table(name = "users2") 
public class User2 { 

    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private long id; 

    private String name1; 

    public User2() {} 

    public User1(String name1) { 
     this.name2 = name2; 
    } 

    // Getter Setters 

} 

使用r1Dao.java

@Transactional 
public interface User1Dao extends CrudRepository<User1, Long> {  
} 

User2Dao.java

@Transactional 
public interface User2Dao extends CrudRepository<User2, Long> {  
} 

UserController.java

@Controller 
public class UserController implements CommandLineRunner { 

    @Autowired private User1Dao user1Dao; 
    @Autowired private User2Dao user2Dao; 

    @Override 
    public void run(String... arg0) throws Exception { 
     user1Dao.save(new User1("name 1")); 
     user2Dao.save(new User2("name 2")); 
    } 

} 

Application.java

@SpringBootApplication 
public class Application { 

    public static void main(String[] args) { 
    SpringApplication.run(Application.class, args); 
    } 

} 

application.properties

spring.weather_alerts.url=jdbc:mysql://localhost:3306/weather_alerts 
spring.weather_alerts.username=root 
spring.weather_alerts.password= 

spring.weather.url=jdbc:mysql://localhost:3306/weather 
spring.weather.username=root 
spring.weather.password= 

spring.jpa.show-sql = true 
spring.jpa.hibernate.ddl-auto = update 
spring.jpa.hibernate.naming-strategy = org.hibernate.cfg.ImprovedNamingStrategy 

spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5Dialect 
+0

这看起来类似于现有岗位http://stackoverflow.com/questions/26308035/spring-boot-spring-data-jpa-with-multiple-datasources –

回答

1

Spring Data默认情况下查找名为“entityManagerFactory”的EntityManagerFactory bean,请参阅docs。由于您没有该名称的EntityManagerFactory bean,因此您会看到该错误。

解决方案是在您的配置中定义entityManagerFactoryRef名称,例如

@EnableJpaRepositories(entityManagerFactoryRef = "weatherManagerFactory") 

您可能需要创建两个单独的配置类,你LocalContainerEntityManagerFactoryBean豆各含一个,并为每个类级@EnableJpaRepositories

备注:不要忘记在您的Application.java中排除DataSourceAutoconfiguration类,因为您正在自己配置数据源。

@SpringBootApplication(exclude = DataSourceAutoConfiguration.class) 
相关问题