Стиль Spring Java Configuration (JavaConfig) с Maven, JUnit, Log4J, Hibernate и HyperSQL (hsqldb)
Дни использования MySQL, DB2, PostgreSQL и т. Д. Для разработки прошли. Я не знаю, почему любой программист развивался с ними.
Каждый разработчик должен запустить какую-то базу данных в памяти, такую как HSQLDB, в рамках проекта по разработке и тестированию, а затем переместить полноразмерную базу данных для модульного тестирования, подготовки и производства.
Это пример Spring Project, показывающий, как использовать стиль Java Configuration (JavaConfig) Spring с Maven, JUnit, Log4J, Hibernate и HyperSQL (hsqldb).
Этот пример также покажет, как использовать @PropertySource для чтения свойств и использовать объект Environment для добавления свойств к вашим объектам.
Как использовать стиль конфигурации Java (JavaConfig) Spring, а не файлы XML для настройки
Попробуйте заменить конфигурацию Spring XML на стиль Spring Java Configuration (JavaConfig), и это правильный путь.
Конфигурация Spring XML так пришла, что пришло время оттолкнуть XML и взглянуть на стиль Java Configuration (JavaConfig) Spring.
Вот основной код моего примера проекта
public static void main(String[] args)
{
/**
*
* This is going to setup the database configuration in the applicationContext
* you can see that I am using the new Spring's Java Configuration style and not some OLD XML file
*
*/
ApplicationContext context = new AnnotationConfigApplicationContext(DatabaseConfiguration.class);
MessageService mService = context.getBean(MessageService.class);
/**
*
* This is going to create a message object and set the message to "Hello World" then pass the object to t
* the service layer for inserting into the database
*
*/
Message message = new Message();
message.setMessage("Hello World");
mService.SaveMessage(message);
/**
*
* This is going to do a 2nd Message in database.
*
*/
message.setMessage("I love Regan");
mService.SaveMessage(message);
/**
*
* This is going to get the messages from database and do the following:
* - display number of message(s)
* - display each message in database
*
*/
List<Message> myList = mService.listMessages();
LOGGER.debug("You Have " + myList.size() + " Message(s) In The Database");
for (Message i : myList)
{
LOGGER.debug("Message: ID: " + i.getId() + ", Message: " + i.getMessage() + ".");
}
/**
*
* This is the end!!!
*
*/
LOGGER.debug("This is the end!!!!");
}
Теперь давайте посмотрим, как я настраиваю базу данных в стиле Spring Java Configuration (JavaConfig), а не в XML-файле.
@Configuration
@EnableTransactionManagement
@ComponentScan(basePackageClasses = {Main.class})
@PropertySource("classpath:application.properties")
public class DatabaseConfiguration
{
/**
*
* This is used to setup the database. It will load the schema.sql file which does a create table so we have
* a table to work with in the project
*/
@Bean
public DataSourceInitializer dataSourceInitializer(DataSource dataSource)
{
ResourceDatabasePopulator resourceDatabasePopulator = new ResourceDatabasePopulator();
resourceDatabasePopulator.addScript(new ClassPathResource("/schema.sql"));
DataSourceInitializer dataSourceInitializer = new DataSourceInitializer();
dataSourceInitializer.setDataSource(dataSource);
dataSourceInitializer.setDatabasePopulator(resourceDatabasePopulator);
return dataSourceInitializer;
}
/**
*
* This will be setting up a datasource using HyperSQL (hsqldb) in memory
*/
@Bean
public DataSource hsqlDataSource()
{
BasicDataSource basicDataSource = new BasicDataSource();
basicDataSource.setDriverClassName(org.hsqldb.jdbcDriver.class.getName());
basicDataSource.setUsername("sa");
basicDataSource.setPassword("");
basicDataSource.setUrl("jdbc:hsqldb:mem:mydb");
return basicDataSource;
}
/**
*
* This setups the session factory
*/
@Bean
public LocalSessionFactoryBean sessionFactory(Environment environment,
DataSource dataSource)
{
/**
*
* Getting packageOfModelBean from package of message bean
*
*/
String packageOfModelBeans = Message.class.getPackage().getName();
LocalSessionFactoryBean factoryBean = new LocalSessionFactoryBean();
factoryBean.setDataSource(dataSource);
factoryBean.setHibernateProperties(buildHibernateProperties(environment));
factoryBean.setPackagesToScan(packageOfModelBeans);
return factoryBean;
}
/**
*
* Loading all the hibernate properties from a properties file
*/
protected Properties buildHibernateProperties(Environment env)
{
Properties hibernateProperties = new Properties();
hibernateProperties.setProperty("hibernate.dialect", env.getProperty("hibernate.dialect"));
hibernateProperties.setProperty("hibernate.show_sql", env.getProperty("hibernate.show_sql"));
hibernateProperties.setProperty("hibernate.use_sql_comments", env.getProperty("hibernate.use_sql_comments"));
hibernateProperties.setProperty("hibernate.format_sql", env.getProperty("hibernate.format_sql"));
hibernateProperties.setProperty("hibernate.hbm2ddl.auto", env.getProperty("hibernate.hbm2ddl.auto"));
hibernateProperties.setProperty("hibernate.generate_statistics", env.getProperty("hibernate.generate_statistics"));
hibernateProperties.setProperty("javax.persistence.validation.mode", env.getProperty("javax.persistence.validation.mode"));
//Audit History flags
hibernateProperties.setProperty("org.hibernate.envers.store_data_at_delete", env.getProperty("org.hibernate.envers.store_data_at_delete"));
hibernateProperties.setProperty("org.hibernate.envers.global_with_modified_flag", env.getProperty("org.hibernate.envers.global_with_modified_flag"));
return hibernateProperties;
}
/**
*
* This is setting up the hibernate transaction manager
*
*/
@Bean
public HibernateTransactionManager hibernateTransactionManager(SessionFactory sessionFactory)
{
return new HibernateTransactionManager(sessionFactory);
}
}
Вы можете видеть, как легко использовать стиль Spring Java Configuration (JavaConfig), а не XML. Время использования XML-файлов со Springs прошло…
Вы можете увидеть проект на github по адресу https://github.com/JohnathanMarkSmith/NoMySQL
Скачать и запустить
Так что теперь пришло время скачать проект с github и запустить его, вам нужно выполнить следующие команды:
git clone [email protected]:JohnathanMarkSmith/NoMySQL.git
cd NoMySQL
mvn package
cd target
java -jar NoMySQL.jar
Вот и все, и вы должны увидеть следующую строку на консоли:
2013-05-24 08:28:23,401 [main] DEBUG com.johnathanmarksmith.noMySQL.Main - You Have 2 Message(s) In The Database
2013-05-24 08:28:23,401 [main] DEBUG com.johnathanmarksmith.noMySQL.Main - Message: ID: 1, Message: Hello World.
2013-05-24 08:28:23,401 [main] DEBUG com.johnathanmarksmith.noMySQL.Main - Message: ID: 2, Message: I love Regan.
2013-05-24 08:28:23,401 [main] DEBUG com.johnathanmarksmith.noMySQL.Main - This is the end!!!!
В этом проекте используются Java, Spring, Hibernate, Maven, jUnit, Log4J, HSQLDB и Github.
Если у вас есть какие-либо вопросы или комментарии, пожалуйста, напишите мне на [email protected]