当前位置: 首页 > 知识库问答 >
问题:

如何在众多的JAR之间分离我的Spring JPA配置?

楚意
2023-03-14

应用程序#1将包含带有Hibernate映射的DAO模型、JPA存储库、DTO模型以及将DAO转换为DTO的逻辑。

应用程序#2将包含包含所有业务逻辑的RESTful控制器和服务类。

应用程序#1配置:

// For application startup
package com.appone.pkg.one

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

// For global configuration files across numerous projects
package com.appone.pkg.two

@Configuration
public class GlobalAppConfig {

    @Bean
    MapperFacade mapperFacade() {
        MapperFactory factory = new DefaultMapperFactory.Builder().build();

        factory.classMap(Group.class, GroupDTO.class).byDefault().register();
        factory.classMap(Role.class, RoleDTO.class).byDefault().register();
        factory.classMap(User.class, UserDTO.class).byDefault().register();

        return factory.getMapperFacade();
    }
 }

// For configuration aspects important for 1 project in particular
package com.appone.pkg.three

@Configuration
@EnableJpaRepositories("com.pkg.three.jpa.repository")
public class AppTwoConfig {

    @Autowired
    private EntityManager em;
    private RepositoryFactorySupport factorySupport;

    private void initialize(){
        if(factorySupport == null){
            factorySupport = new JpaRepositoryFactory(em);
        }
    }

    @Bean
    GroupRepository groupRepository(){
        initialize();
        return factorySupport.getRepository(GroupRepository.class);
    }
    @Bean
    RoleRepository roleRepository(){
        initialize();
        return factorySupport.getRepository(RoleRepository.class);
    }
    @Bean
    UserRepository userRepository(){
        initialize();
        return factorySupport.getRepository(UserRepository.class);
    }
    @Bean
    GroupValidator groupValidator(){
        return new GroupValidator();
    }
    @Bean
    UserValidator userValidator(){
        return new UserValidator();
    }
    @Bean
    ResourceMapper resourceMapper(){
        return new ResourceMapper();
    }
}
package com.apptwo.pkg.one;

@SpringBootApplication
@EnableAutoConfiguration
@EntityScan(basePackageClasses = {com.appone.pkg.three.AppTwoConfig.class})
public class ApplicationTwo {
    public static void main(String[] args) {
        SpringApplication.run(ApplicationTwo.class, args);
    }
}

应用程序#2数据加载:

package com.apptwo.pkg.two;

@Component
public class DataLoader implements ApplicationRunner {

    @Autowired
    private GroupRepository groupRepository;
    @Autowired
    private RoleRepository roleRepository;
    @Autowired
    private UserRepository userRepository;
    @Autowired
    private ResourceMapper resourceMapper;

    /**
     * Loads initial data into the h2 database.
     */
    public void run(ApplicationArguments args) {
        // Load the initial data ... 
    }
}

这是我尝试启动应用程序#2时遇到的例外情况。应用程序#1可以自己启动,但我没有使用那里的存储库,如果我尝试的话,我相信它可能会抛出错误。不过,最终我只想要应用程序#2中的逻辑。你对我做错了什么有什么想法吗?

我需要初始化应用程序#1配置中的所有依赖项,然后在运行应用程序#2配置之前从应用程序#2内部运行该配置。

操作:考虑在您的配置中定义一个类型为“com.appone.pkg.three.jpa.repository.GroupRepository”的bean。

共有1个答案

乐正德华
2023-03-14

多亏了几个人的共同努力,我找到了解决办法。

部分帮助来自这篇文章:在Spring Boot中不能自动连接@Repository注释接口

步骤1:

步骤2:

我像这样更改了AppTwoConfig.java,

// For configuration aspects important for 1 project in particular
package com.appone.pkg.three

@Configuration
@EnableJpaRepositories("com.pkg.three.jpa.repository")
@EntityScan("com.pkg.three.jpa.model")
public class AppTwoConfig {

    @Bean
    GroupValidator groupValidator(){
        return new GroupValidator();
    }
    @Bean
    UserValidator userValidator(){
        return new UserValidator();
    }
    @Bean
    ResourceMapper resourceMapper(){
       return new ResourceMapper();
    }
}

步骤3:

package com.apptwo.pkg.one;

@SpringBootApplication
@EnableAutoConfiguration
@ComponentScan(basePackageClasses = {
        com.apptwo.pkg.one.config.AppConfig.class,
        com.appone.pkg.two.GlobalAppConfig.class,
        com.appone.pkg.three.AppTwoConfig.class
})
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}
 类似资料:
  • 在我的Spring Boot应用程序中有POJO,下面是它的样子: 现在我想选择所有与给定值相关的方式是POJO的成员。 所以这是我的查询

  • 我有一张按年、月、日划分的蜂巢表

  • 我正在开发一个spring批处理应用程序(内存为2GB),尝试处理数据(在处理过程中使用select查询获取数据),并在postgres DB中插入大约100万条处理过的记录。我在这个项目中使用Spring Data JPA。但是Spring JPA在处理这些记录时消耗了太多内存

  • 问题内容: 假设我有x1,y1,还有x2,y2。 我如何找到它们之间的距离?这是一个简单的数学函数,但是此在线代码段吗? 问题答案: dist = sqrt( (x2 - x1)2 + (y2 - y1)2 ) 正如其他人指出的那样,您也可以使用等效的内置函数:

  • 我有3个Kafka经纪人在3个不同的VM,其中一个还运行一个Zookeeper。我现在创建一个有8个分区的主题。制作人在创建的“主题”上向这些经纪人组推送消息。 Kafka是如何在经纪人之间分配话题及其分区的? 当新的Kafka代理加入集群时,Kafka是否重新分发主题? 创建主题后是否可以增加主题分区?

  • 我使用行人库(使用ps源、ping Goto和ps汇),想要模拟人行道环境。这个模型的目标是得到行人之间的距离小于1m的数据。所以,我尝试计算行人之间的距离。在Any逻辑中,可以通过使用getX()、getY和getId(可以每秒计算)来收集行人的信息。但是我不知道如何选择行人代理并计算它们之间的距离。我的意思是,如果有10个行人(id:1, 2, 3...),如何每秒钟获得1和2、1和3、2和3