package com.juick.demo.configuration; import ch.vorburger.exec.ManagedProcessException; import ch.vorburger.mariadb4j.DB; import com.juick.server.protocol.JuickProtocol; import com.juick.service.search.SearchService; import org.apache.commons.dbcp2.BasicDataSource; import org.springframework.beans.BeansException; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.DependsOn; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.datasource.DataSourceTransactionManager; import org.springframework.transaction.PlatformTransactionManager; import org.springframework.transaction.annotation.TransactionManagementConfigurer; import java.util.Collections; import java.util.List; /** * Created by vitalyster on 19.12.2016. */ @Configuration @ComponentScan(basePackages = {"com.juick.demo", "com.juick.service", "com.juick.server.protocol"}) public class DemoAppConfiguration implements ApplicationContextAware, TransactionManagementConfigurer { private ApplicationContext applicationContext; @Override public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { this.applicationContext = applicationContext; } @Bean public BasicDataSource dataSource() { try { DB db = DB.newEmbeddedDB(33306); db.start(); db.createDB("juick"); db.source("schema.sql"); BasicDataSource dataSource = new BasicDataSource(); dataSource.setDriverClassName("com.mysql.jdbc.Driver"); dataSource.setUrl("jdbc:mysql://localhost:33306/juick?autoReconnect=true&user=root"); dataSource.setValidationQuery("select 1"); return dataSource; } catch (ManagedProcessException e) { return null; } } @Bean public PlatformTransactionManager transactionManager() { return new DataSourceTransactionManager(dataSource()); } @Override public PlatformTransactionManager annotationDrivenTransactionManager() { return transactionManager(); } @Bean @DependsOn("dataSource") public JdbcTemplate jdbcTemplate() { return new JdbcTemplate(dataSource()); } @Bean public SearchService emptySearchService() { return new SearchService() { @Override public void setMaxResult(int maxResult) { } @Override public List searchInAllMessages(String searchString, int messageIdBefore) { return Collections.emptyList(); } @Override public List searchByStringAndUser(String searchString, int userId, int messageIdBefore) { return Collections.emptyList(); } }; } @Bean public JuickProtocol juickProtocol() { return new JuickProtocol("http://localhost:8080/"); } }