У меня есть приложение весенней загрузки, которое использует другие модули, использующие зависимость maven.
Все модули имеют одинаковую структуру пакета.
Например: com.ams.web.model
, com.ams.web.repository
, com.ams.web.service
и com.ams.web.websocket
.
И у меня есть com.ams.web
для конфигурации моего основного модуля springbootapplication с методом main. Но когда я пытаюсь запустить сервер, он терпит неудачу из-за проблем с автопроводкой. Это указывает на то, что приложение не может сканировать пакет из субмодулей. [Все необходимые классы имеют либо @Service
, либо @Repository
, либо @Component
аннотацию, которая должна включать их для сканирования]
Как сканирование pacakge работает по умолчанию в приложении springboot, которое зависит от других модулей? Как включить сканирование пакетов других модулей из моего весеннего приложения.
Код:
package com.ams.web;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRegistration.Dynamic;
import org.apache.commons.io.IOUtils;
import org.apache.log4j.PropertyConfigurator;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.support.SpringBootServletInitializer;
import org.springframework.core.env.ConfigurableEnvironment;
import org.springframework.core.io.Resource;
import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;
import org.springframework.web.filter.DelegatingFilterProxy;
import org.springframework.web.servlet.DispatcherServlet;
import com.ams.web.filters.AllRequestFilter;
@SpringBootApplication(scanBasePackages={"com.ams.web"})
public class WebInitializer extends SpringBootServletInitializer {
public void onStartup(ServletContext servletContext) throws ServletException {
AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext();
context.register(ApplicationConfig.class);
PropertyConfigurator.configure(loadLog4jProperties(context));
String profile = loadProperties.getProperty("env.name", "app");
System.out.println("Env Profile : " + profile);
ConfigurableEnvironment environment = context.getEnvironment();
environment.setActiveProfiles(profile);
context.setServletContext(servletContext);
servletContext.addFilter("AllRequestFilter", new AllRequestFilter()).addMappingForUrlPatterns(null, true, "/*");
servletContext.addFilter("amsSpringAllRequestFilter", new AmsSpringAllRequestFilter()).addMappingForUrlPatterns(null, true, "/*");
Dynamic servlet = servletContext.addServlet("dispatcher", new DispatcherServlet(context));
servlet.addMapping("/");
servlet.setLoadOnStartup(1);
}
UrlList:
package com.ams.web.repository;
import java.util.concurrent.ConcurrentLinkedQueue;
import org.springframework.stereotype.Component;
import com.ams.web.environment.All;
@All
@Component
public class UrlList {
Моя пользовательская аннотация в другом модуле:
package com.ams.web.environment;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import org.springframework.context.annotation.Profile;
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Profile( "app", "mock", "test")
@Component
public @interface All {}