java如何制作runnablle jar,保持休眠状态。属性和log4j。财产分开
如何制作runnablle罐子,保持冬眠状态。属性和log4j。财产分开。 这样就可以根据操作系统和环境修改属性文件
开发平台在带有eclipse+maven+spring+hibernate的windows上 部署可以在windows/linux上进行
我按照以下步骤制作runnable jar。 出口->;可运行jar->;将所需库复制到生成的JAR旁边的子文件夹中
在windows中,该命令可以正常工作
c:\JavaTest> java -cp c:\JavaTest\testprg_lib;.; -jar testprg.jar
冬眠。属性和log4j。属性文件保存在c:\JavaTest目录中
在linux上使用以下命令运行时出现以下错误
/home/skay>;java-cp/home/skay/JavaTest/testprg_-lib::-jar testprg。罐子
> ---- error in linux ---- 2015-09-25 18:45:52,675 INFO [org.springframework.context.annotation.AnnotationConfigApplicationContext]
> - <Refreshing org.springframework.context.annotation.AnnotationConfigApplicationContext@1f0d7b0:
> startup date [Fri Sep 25 18:45:52 IST 2015]; root of context
> hierarchy> 2015-09-25 18:45:53,294 INFO
> [org.springframework.jdbc.datasource.DriverManagerDataSource] -
> <Loaded JDBC driver: com.mysql.jdbc.Driver> 2015-09-25 18:45:53,425
> INFO [org.hibernate.annotations.common.Version] - <HCANN000001:
> Hibernate Commons Annotations {4.0.5.Final}> 2015-09-25 18:45:53,432
> INFO [org.hibernate.Version] - <HHH000412: Hibernate Core
> {4.3.8.Final}> 2015-09-25 18:45:53,434 INFO
> [org.hibernate.cfg.Environment] - <HHH000205: Loaded properties from
> resource hibernate.properties:
> {jdbc.url=jdbc:mysql://localhost:3306/TestPrg, jdbc.username=root,
> hibernate.dialect=org.hibernate.dialect.MySQLDialec,
> hibernate.show_sql=true,
> hibernate.bytecode.use_reflection_optimizer=false,
> jdbc.password=root123, hibernate.format_sql=true,
> jdbc.driverClassName=com.mysql.jdbc.Driver}> 2015-09-25 18:45:53,435
> INFO [org.hibernate.cfg.Environment] - <HHH000021: Bytecode provider
> name : javassist> 2015-09-25 18:45:53,881 WARN
> [org.springframework.context.annotation.AnnotationConfigApplicationContext]
> - <Exception encountered during context initialization - cancelling refresh attempt>
> org.springframework.beans.factory.BeanCreationException: Error
> creating bean with name 'eventOnelyData': Injection of autowired
> dependencies failed; nested exception is
> org.springframework.beans.factory.BeanCreationException: Could not
> autowire field: private org.hibernate.SessionFactory
> com.cms.testprg.mdao.AbstractDao.sessionFactory; nested exception is
> org.springframework.beans.factory.BeanCreationException: Error
> creating bean with name 'sessionFactory' defined in class path
> resource [com/cms/testprg/configuration/HibernateConfiguration.class]:
> Invocation of init method failed; nested exception is
> org.hibernate.boot.registry.selector.spi.StrategySelectionException:
> Unable to resolve name [org.hibernate.dialect.MySQLDialec] as strategy
> [org.hibernate.dialect.Dialect] at
> org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:334)
> at
> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1210)
> at
> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:537)
> at
> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:476)
> at
> org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:303)
> at
> org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
> at
> org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:299)
> at
> org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194)
> at
> org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:755)
> at
> org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:757)
> at
> org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:480)
> at
> org.springframework.context.annotation.AnnotationConfigApplicationContext.<init>(AnnotationConfigApplicationContext.java:84)
> at
> com.cms.testprg.mainapp.MainAppTestPrg.<init>(MainAppTestPrg.java:117)
> at
> com.cms.testprg.mainapp.MainAppTestPrg.main(MainAppTestPrg.java:75)
> Caused by: org.springframework.beans.factory.BeanCreationException:
> Could not autowire field: private org.hibernate.SessionFactory
> com.cms.testprg.mdao.AbstractDao.sessionFactory; nested exception is
> org.springframework.beans.factory.BeanCreationException: Error
> creating bean with name 'sessionFactory' defined in class path
> resource [com/cms/testprg/configuration/HibernateConfiguration.class]:
> Invocation of init method failed; nested exception is
> org.hibernate.boot.registry.selector.spi.StrategySelectionException:
> Unable to resolve name [org.hibernate.dialect.MySQLDialec] as strategy
> [org.hibernate.dialect.Dialect] at
> org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:561)
> at
> org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88)
> at
> org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:331)
> ... 13 more Caused by:
> org.springframework.beans.factory.BeanCreationException: Error
> creating bean with name 'sessionFactory' defined in class path
> resource [com/cms/testprg/configuration/HibernateConfiguration.class]:
> Invocation of init method failed; nested exception is
> org.hibernate.boot.registry.selector.spi.StrategySelectionException:
> Unable to resolve name [org.hibernate.dialect.MySQLDialec] as strategy
> [org.hibernate.dialect.Dialect] at
> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1574)
> at
> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:539)
> at
> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:476)
> at
> org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:303)
> at
> org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
> at
> org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:299)
> at
> org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194)
> at
> org.springframework.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates(DefaultListableBeanFactory.java:1120)
> at
> org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1044)
> at
> org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:942)
> at
> org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:533)
> ... 15 more Caused by:
> org.hibernate.boot.registry.selector.spi.StrategySelectionException:
> Unable to resolve name [org.hibernate.dialect.MySQLDialec] as strategy
> [org.hibernate.dialect.Dialect] at
> org.hibernate.boot.registry.selector.internal.StrategySelectorImpl.selectStrategyImplementor(StrategySelectorImpl.java:128)
> at
> org.hibernate.boot.registry.selector.internal.StrategySelectorImpl.resolveDefaultableStrategy(StrategySelectorImpl.java:155)
> at
> org.hibernate.boot.registry.selector.internal.StrategySelectorImpl.resolveStrategy(StrategySelectorImpl.java:136)
> at
> org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.constructDialect(DialectFactoryImpl.java:78)
> at
> org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:68)
> at
> org.hibernate.engine.jdbc.internal.JdbcServicesImpl.configure(JdbcServicesImpl.java:165)
> at
> org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.java:111)
> at
> org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:234)
> at
> org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:206)
> at
> org.hibernate.cfg.Configuration.buildTypeRegistrations(Configuration.java:1887)
> at
> org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1845)
> at
> org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1930)
> at
> org.springframework.orm.hibernate4.LocalSessionFactoryBuilder.buildSessionFactory(LocalSessionFactoryBuilder.java:372)
> at
> org.springframework.orm.hibernate4.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:454)
> at
> org.springframework.orm.hibernate4.LocalSessionFactoryBean.afterPropertiesSet(LocalSessionFactoryBean.java:439)
> at
> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1633)
> at
> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1570)
> ... 25 more
> ------ end of error -------
休眠配置。爪哇
import java.util.Properties;
import javax.sql.DataSource;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.core.env.Environment;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
import org.springframework.orm.hibernate4.HibernateTransactionManager;
import org.springframework.orm.hibernate4.LocalSessionFactoryBean;
import org.springframework.transaction.annotation.EnableTransactionManagement;
@Configuration
@EnableTransactionManagement
@ComponentScan({ "com.cms.testprg.configuration" })
@PropertySource(value = { "classpath:hibernate.properties" })
public class HibernateConfiguration {
@Autowired
private Environment environment;
@Bean
public LocalSessionFactoryBean sessionFactory() {
LocalSessionFactoryBean sessionFactory = new LocalSessionFactoryBean();
sessionFactory.setDataSource(dataSource());
sessionFactory.setPackagesToScan(new String[] { "com.cms.testprg.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"));
return properties;
}
@Bean
@Autowired
public HibernateTransactionManager transactionManager(SessionFactory s) {
HibernateTransactionManager txManager = new HibernateTransactionManager();
txManager.setSessionFactory(s);
return txManager;
}
}
AppConfig。爪哇
package com.cms.testprg.configuration;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
@Configuration
@ComponentScan(basePackages = "com.cms.testprg")
public class AppConfig {
}
MainAppTestPrg。java:显示如何使用“appContext”保存数据的代码片段
public static void main(String[] args) {
........
appContext = new AnnotationConfigApplicationContext(AppConfig.class);
saveData(appContext);
}
SaveToDB。爪哇
public class SaveToDB {
public void saveData(AbstractApplicationContext context) {
LoginDataService serviceLoginData = (LoginDataService) context.getBean("loginDataService");
.......
setting data into LoginInfo model object
.......
serviceLoginData.saveLoginData( LoginInfo);
}
}
pom文件
<!-- Make this jar executable -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<excludes>
<exclude>**/log4j.properties</exclude>
<exclude>**/hibernate.properties</exclude>
</excludes>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<mainClass>com.cms.testprg.mainapp.MainAppTestPrg</mainClass>
<classpathPrefix>dependency-jars/</classpathPrefix>
</manifest>
</archive>
</configuration>
</plugin>
</plugins>
想知道下面的事情, -在linux上执行时出现错误的解决方案 -使用清单文件和清单文件中所有可能的参数 -在访问库和属性文件时具有相对路径
# 1 楼答案
这行配置中有一个错误