Java – multi module project configuration based on spring MVC annotations

I implemented two Maven based independent web projects using spring MVC, hibernate and Jax rs

Item 1: parent program

<packaging>pom</packaging>
    <modules>
        <module>../child1</module>
        <module>../child2</module>
    </modules>

Child 1:

<packaging>jar</packaging>
    <parent>
        <groupId>com.xyz.alpha</groupId>
        <artifactId>parent</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <relativePath>../parent</relativePath>
    </parent>

Child 2:

<packaging>jar</packaging>

    <dependency>
            <groupId>com.xyz.alpha</groupId>
            <artifactId>child1</artifactId>
            <version>2.0.2</version>
    </dependency>
    <parent>
        <groupId>com.xyz.alpha</groupId>
        <artifactId>parent</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <relativePath>../parent</relativePath>
    </parent>

But I need to configure the project in Java so that it will scan the parent's components as well as child and execution projects At present, I configure it separately for each project:

AppIntializer. java

public class AppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {

    @Override
    protected Class<?>[] getRootConfigClasses() {
        return new Class[] { AppConfig.class };
    }

    @Override
    protected Class<?>[] getServletConfigClasses() {
        return null;
    }

    @Override
    protected String[] getServletMappings() {
        return new String[] { "/" };
    }
}

AppConfig. java

@Configuration
@EnableWebMvc
@ComponentScan(basePackages = "com.x.y")
public class AppConfig extends WebMvcConfigurerAdapter{


    @Bean
    public ViewResolver viewResolver() {
        InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
        viewResolver.setViewClass(JstlView.class);
        viewResolver.setPrefix("/WEB-INF/views/");
        viewResolver.setSuffix(".jsp");
        return viewResolver;
    }

    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**");
    }

    @Override
    public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
        configurer.enable();
    }

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/resources/**").addResourceLocations("/resources/");


    }

}

HibernateConfiguration. java

@Configuration
@EnableTransactionManagement
@ComponentScan({ "com.x.y.configuration" })
@PropertySource(value = { "classpath:application.properties" })
public class HibernateConfiguration {

    @Autowired
    private Environment environment;

    @Bean
    public LocalSessionfactorybean sessionFactory() {
        LocalSessionfactorybean sessionFactory = new LocalSessionfactorybean();
        sessionFactory.setDataSource(dataSource());
        sessionFactory.setPackagesToScan(new String[] { "com.x.y.model" });
        sessionFactory.setHibernateProperties(hibernateProperties());
        return sessionFactory;
     }

    @Bean
    public DataSource dataSource() {
        DriverManagerDataSource dataSource = new DriverManagerDataSource();
        dataSource.setDriverClassName(environment.getrequiredProperty("jdbc.driverClassName"));
        dataSource.setUrl(environment.getrequiredProperty("jdbc.url"));
        dataSource.setUsername(environment.getrequiredProperty("jdbc.username"));
        dataSource.setPassword(environment.getrequiredProperty("jdbc.password"));
        return dataSource;
    }

    private Properties hibernateProperties() {
        Properties properties = new Properties();
        properties.put("hibernate.dialect",environment.getrequiredProperty("hibernate.dialect"));
        properties.put("hibernate.show_sql",environment.getrequiredProperty("hibernate.show_sql"));
        properties.put("hibernate.format_sql",environment.getrequiredProperty("hibernate.format_sql"));
        properties.put("hibernate.hbm2ddl.auto",environment.getrequiredProperty("hibernate.hbm2ddl.auto"));
        return properties;        
    }

    @Bean
    @Autowired
    public HibernateTransactionManager transactionManager(SessionFactory s) {
       HibernateTransactionManager txManager = new HibernateTransactionManager();
       txManager.setSessionFactory(s);
       return txManager;
    }
}

Solution

If I were you, I would create a third module among parents and use two new children as dependencies Then, you only need to configure the spring for the new module as required

The content of this article comes from the network collection of netizens. It is used as a learning reference. The copyright belongs to the original author.
THE END
分享
二维码
< <上一篇
下一篇>>