그 문제로 수십억의 질문을 알고 있지만 문제를 해결할 수 없습니다. 나는 봄 + 최대 절전 모드로 애플 리케이션을 가지고. Hibernate는 2 개의 설정 (고객 및 관리 데이터베이스 용)을 가지고있다. 고객의 최대 절전 모드는 DATABASE 방식으로 멀티 테넌시를 지원합니다. 또한 스프링 보안을 사용합니다.
이 세입자 아이디 해결을위한 내 수업은 다음과 같습니다Autowired @Service는 null이 아닙니다.
@Component
public class MyTenantIdentifierResolver implements CurrentTenantIdentifierResolver {
@Autowired
private UserService userService;
public String resolveCurrentTenantIdentifier() {
User u = (User) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
com.lspsystem.model.User us = userService.getByLogin(u.getUsername());
return us.getCompany().getTenantId();
}
public boolean validateExistingCurrentSessions() {
return true;
}
}
그것은 내 UserService입니다 :
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserDAO userDAO;
public User get(Integer id) {
return userDAO.get(id);
}
public boolean delete(Integer id) {
return userDAO.delete(id);
}
public void update(User u) {
userDAO.update(u);
}
public List<User> getAll(User u) {
return userDAO.getAllUsers();
}
public User getByLogin(String login) {
return userDAO.getByLogin(login);
}
}
내 질문 : MyTenantIdResolver
에 UserService
항상 null
왜? 그러나 예를 들어 다음 학급 (보안)에서는 null
이 아닙니다. UserService 및 MyTenantIdResolver 다른 최대 절전 CONFIGS에 속하는
@Service
public class UserDetailsServiceImpl implements UserDetailsService {
@Autowired
private UserService userService;
public User loadUserByUsername(String s) throws UsernameNotFoundException {
com.lspsystem.model.User u = userService.getByLogin(s);
return new User(u.getEmail(), u.getPassword(), true, true, true, true, getGrantedAuthorities(u));
}
@Autowired
public UserDetailsServiceImpl(UserService userService) {
this.userService = userService;
}
private List<GrantedAuthority> getGrantedAuthorities(com.lspsystem.model.User u) {
List<GrantedAuthority> authorities = new ArrayList<GrantedAuthority>();
return authorities;
}
}
참고.
업데이트]
고객 최대 절전 모드 설정 :
@Configuration
@EnableTransactionManagement
@PropertySource(value = {"classpath:customerHibernate.properties"})
public class RemoteDBHibernateConfig {
@Autowired
private Environment environment;
@Bean(name = "customerSessionFactory")
public SessionFactory sessionFactory() throws IOException{
LocalSessionFactoryBean builder =
new LocalSessionFactoryBean();
builder.setDataSource(dataSource1());
builder.setPackagesToScan("com.lspsystem.model");
builder.setHibernateProperties(hibernateProperties());
builder.afterPropertiesSet();
return builder.getObject();
}
@Bean("defaultDS")
public DataSource dataSource1() {
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.multiTenancy", environment.getRequiredProperty("hibernate.multiTenancy"));
properties.put("hibernate.multi_tenant_connection_provider", environment.getRequiredProperty("hibernate.multi_tenant_connection_provider"));
properties.put("hibernate.tenant_identifier_resolver", environment.getRequiredProperty("hibernate.tenant_identifier_resolver"));
return properties;
}
@Bean
@Autowired
public HibernateTransactionManager transactionManager() throws IOException{
HibernateTransactionManager txManager = new HibernateTransactionManager();
txManager.setSessionFactory(sessionFactory());
return txManager;
}}
관리 최대 절전 모드 설정 :
@Configuration
@EnableTransactionManagement
@PropertySource(value = {"classpath:adminHibernate.properties"})
public class AdminDBHibernateConfig {
@Autowired
private Environment environment;
@Bean(name = "adminSessionFactory")
public SessionFactory sessionFactory() throws IOException {
LocalSessionFactoryBean builder =
new LocalSessionFactoryBean();
builder.setDataSource(dataSource());
builder.setPackagesToScan("com.lspsystem.model");
builder.setHibernateProperties(hibernateProperties());
builder.afterPropertiesSet();
return builder.getObject();
}
@Bean
public DataSource dataSource() {
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName(environment.getRequiredProperty("admin.jdbc.driverClassName"));
dataSource.setUrl(environment.getRequiredProperty("admin.jdbc.url"));
dataSource.setUsername(environment.getRequiredProperty("admin.jdbc.username"));
dataSource.setPassword(environment.getRequiredProperty("admin.jdbc.password"));
return dataSource;
}
private Properties hibernateProperties() {
Properties properties = new Properties();
properties.put("hibernate.dialect", environment.getRequiredProperty("admin.hibernate.dialect"));
properties.put("hibernate.show_sql", environment.getRequiredProperty("admin.hibernate.show_sql"));
properties.put("hibernate.format_sql", environment.getRequiredProperty("admin.hibernate.format_sql"));
properties.put("hibernate.hbm2dll.auto", environment.getRequiredProperty("admin.hibernate.hbm2ddl.auto"));
return properties;
}
@Bean
@Autowired
public HibernateTransactionManager transactionManager() throws IOException{
HibernateTransactionManager txManager = new HibernateTransactionManager();
txManager.setSessionFactory(sessionFactory());
return txManager;
}}
웹 응용 프로그램 설정 :
@Configuration
@EnableWebMvc
@Import(SecurityConfiguration.class)
public class WebApplicationConfig extends WebMvcConfigurerAdapter{
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/resources/**").addResourceLocations("/resources/");
}
@Bean
public InternalResourceViewResolver viewResolver(){
InternalResourceViewResolver view = new InternalResourceViewResolver();
view.setViewClass(JstlView.class);
view.setPrefix("/WEB-INF/jsp/");
view.setSuffix(".jsp");
return view;
}}
UserDAO, 예를 들어 :
@Repository
public class UserDAOImpl implements UserDAO {
@Autowired
@Qualifier("adminSessionFactory")
private SessionFactory sessionFactory;
public com.lspsystem.model.User get(Integer id) {
Session session = sessionFactory.openSession();
User u = (User)session.load(User.class, id);
return u;
}
public User getByLogin(String login) {
Session session = sessionFactory.openSession();
Query q = session.createQuery("SELECT u FROM User u WHERE u.email = :email");
q.setParameter("email", login);
User u = (User)q.list().get(0);
return u;
}}
구성 클래스/파일을 제공하십시오. –
예. 설정 파일을 보내주십시오. 아무리 생각해 보면 : 단일 서비스가 동시에 두 개의 지속성 conf를 가질 수있는 방법은 무엇입니까? (귀하의 상황을 이해할 수있는 경우) – Zorglube
내 구성이 추가되었습니다. –