Mybatis使用maven打包出现的问题
2017-07-14 16:12
477 查看
之前没有用到的mybatis 的时候,使用mvn打包完成后,项目的配置文件是在jar包外的,以便于修改;在使用mybatis后,使用mvn打包,发现jar中内含jdbc配置文件,此时要考虑如何把jdbc配置文件给打到包外,且能被项目访问到。
1 修改pom文件,将配置文件打到包外指定的文件中
pom文件添加修改如下:
修改完,使用mvn打包完成后,发现所有的配置文件都在jar包外的指定文件夹中,此时启动项目,发现报异常:Could not find resource mybatis.cfg.xml。
java.io.IOException: Could not find resource mybatis.cfg.xml
原因是,创建SqlSessionFactory的时候,使用的路径是”mybatis.cfg.xml”,而此时该配置文件是在jar包外的指定文件目录下。
此时,修改获取mybatis.cfg.xml的方法
此时,打包再运行,报异常:Could not find resource DB.properties
mybatis.xml文件和DB.properties文件都在jar包外,mybatis.xml配置文件中都不到数据库连接信息。
2 对于上述的问题,解决办法
1) 在网上查询相关资料,有一种解决方案是,mybatis.xml文件放置在jar包内,DB配置文件放在包外,在程序种添加一个读jar包外配置文件,再把它设置给mybatis文件,该种方式没有成功。
2) 此外,还有一种,该方案也是将mybatis.xml放置在jar包中,但是,创建SqlSessionFactory的时候,读取的DB属性文件 会将xml文件中的数据库连接信息覆盖。
完成上述的步骤后,由于我们把jdbc的配置文件放到了jar包外,所以在mybatis的配置文件中,只需要把该文件的引入删掉即可。【包内直接引用包外的配置文件,没有找到解决办法】
这种方案,测试的不太好使,可能是我自己的原因,可以试一下。 【经测试,该种方式可以】
参考来源:http://blog.csdn.net/mmd0308/article/details/67640581
3) 第三种是,将mybatis.xml文件放在jar包外,此时直接在配置文件中写数据库连接信息,不从DB属性文件中获取。
4) 现在说的是另外一种,mybatis.xml的作用就是通过读取文件创建 SqlSessionFactory,既然如此,我们也可以通过其他的方式来获得,修改如下。
通过这种方式,我们可以绕过mybatis.xml的配置文件来创建SqlSessionFactory,这样的话,和之前一样,DB配置文件直接写在jar包外。
参考来源:http://blog.csdn.net/jimolangge123/article/details/49228255
1 修改pom文件,将配置文件打到包外指定的文件中
pom文件添加修改如下:
<sourceDirectory>src/main/java</sourceDirectory> <resources> <resource> <directory>src/main/resources</directory> <excludes> <!-- 在此指定,jar包中不含哪些文件 --> <exclude>*.properties</exclude> </excludes> </resource> </resources>
<plugin> <artifactId>maven-resources-plugin</artifactId> <executions> <execution> <id>copy-resources</id> <phase>validate</phase> <goals> <goal>copy-resources</goal> </goals> <configuration> <outputDirectory> <!--指定配置文件的输出路径--> ${project.build.directory}/src/main/resources </outputDirectory> <resources> <resource> <directory>src/main/resources</directory> <includes> <!-- 指定哪些文件将会输出到这个路径下的文件夹中 --> <include>*.properties</include> </includes> <filtering>true</filtering> </resource> </resources> </configuration> </execution> </executions> </plugin>
修改完,使用mvn打包完成后,发现所有的配置文件都在jar包外的指定文件夹中,此时启动项目,发现报异常:Could not find resource mybatis.cfg.xml。
java.io.IOException: Could not find resource mybatis.cfg.xml
原因是,创建SqlSessionFactory的时候,使用的路径是”mybatis.cfg.xml”,而此时该配置文件是在jar包外的指定文件目录下。
Reader reader = Resources.getResourceAsReader("mybatis.cfg.xml"); //构建sqlSession的工厂 sessionFactory = new SqlSessionFactoryBuilder().build(reader);
此时,修改获取mybatis.cfg.xml的方法
//构建sqlSession的工厂 FileInputStream fis = new FileInputStream(new File("src/main/resources/mybatis.cfg.xml")); sessionFactory = new SqlSessionFactoryBuilder().build(fis);
此时,打包再运行,报异常:Could not find resource DB.properties
Error building SqlSession. The error may exist in SQL Mapper Configuration Cause: org.apache.ibatis.builder.BuilderException: Error parsing SQL Mapper Configuration. Cause: java.io.IOException: Could not find resource DB.properties at org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:30)
mybatis.xml文件和DB.properties文件都在jar包外,mybatis.xml配置文件中都不到数据库连接信息。
2 对于上述的问题,解决办法
1) 在网上查询相关资料,有一种解决方案是,mybatis.xml文件放置在jar包内,DB配置文件放在包外,在程序种添加一个读jar包外配置文件,再把它设置给mybatis文件,该种方式没有成功。
2) 此外,还有一种,该方案也是将mybatis.xml放置在jar包中,但是,创建SqlSessionFactory的时候,读取的DB属性文件 会将xml文件中的数据库连接信息覆盖。
Reader reader = Resources.getResourceAsReader("mybatis.cfg.xml"); Properties prop = new Properties(); prop.load(new FileReader(new File("src/main/resources/DB.properties"))); //此时注意DB中的配置项名称 为 driver,url,username,password sessionFactory = new SqlSessionFactoryBuilder().build(reader, prop);
完成上述的步骤后,由于我们把jdbc的配置文件放到了jar包外,所以在mybatis的配置文件中,只需要把该文件的引入删掉即可。【包内直接引用包外的配置文件,没有找到解决办法】
<configuration>
<!-- 引入外部配置文件 -->
<!-- <properties resource="DB.properties"></properties> -->
<!-- 配置mybatis运行环境 -->
<environments default="development ">
<environment id="development ">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="${JDBC_DRIVER}" />
<property name="url" value="${JDBC_URL}" />
<property name="username" value="${USER}" />
<property name="password" value="${PASSWORD}" />
</dataSource>
</environment>
</environments>
<mappers>
<!-- 告知映射文件位置 需要一个一个配置 -->
<package name="com.agm.FundsPAMMSettlement_common.dao"/>
</mappers>
</configuration>
这种方案,测试的不太好使,可能是我自己的原因,可以试一下。 【经测试,该种方式可以】
参考来源:http://blog.csdn.net/mmd0308/article/details/67640581
3) 第三种是,将mybatis.xml文件放在jar包外,此时直接在配置文件中写数据库连接信息,不从DB属性文件中获取。
4) 现在说的是另外一种,mybatis.xml的作用就是通过读取文件创建 SqlSessionFactory,既然如此,我们也可以通过其他的方式来获得,修改如下。
Properties prop = new Properties(); prop.load(new FileReader(new File("src/main/resources/DB.properties"))); String driver = prop.getProperty("JDBC_DRIVER"); String url = prop.getProperty("JDBC_URL"); String username = prop.getProperty("USER"); String password = prop.getProperty("PASSWORD"); DataSource dataSource =new PooledDataSource(driver,url,username,password); TransactionFactory transactionFactory = new JdbcTransactionFactory(); Environment environment = new Environment("development", transactionFactory, dataSource); Configuration configuration = new Configuration(environment); configuration.addMappers("com.agm.FundsPAMMSettlement_common.dao"); sessionFactory = new SqlSessionFactoryBuilder().build(configuration);
通过这种方式,我们可以绕过mybatis.xml的配置文件来创建SqlSessionFactory,这样的话,和之前一样,DB配置文件直接写在jar包外。
参考来源:http://blog.csdn.net/jimolangge123/article/details/49228255
相关文章推荐
- Maven使用package打包Spring Boot时出现:Unable to find a single main class from the following candidates的问题解决
- 不使用IDE,用maven命令打包war项目及出现的问题解决(最全攻略,亲测有效)
- 不使用IDE,用maven命令打包war项目及出现的问题解决(最全攻略,亲测有效)
- 使用maven工具对maven项目进行打包所出现的问题
- maven打包,使用shade插件,避免出现加载spring配置文件报错的问题
- 使用maven的mybatis-generator生成实例和mapping过程以及可能出现问题解决
- 使用Maven打包出现问题
- maven出现(请使用-source 5 或者更高版本以启用XX)问题解决
- 转发:maven打包时始终出现以下提示:-source 1.3 中不支持泛型(请使用 -source 5 或更高版本以启用泛型)
- mybatis 使用foreach时出现"The expression 'list' evaluated to a null value"问题
- 使用Xcode6.1.1打包出现Your account already has a valid iOS Distribution certificate问题
- 在myeclipse中用maven进行项目的打包时出现内存泄露问题
- MAVEN 打包时出现多余的类的问题
- idea中配置使用mybatis出现问题BuilderException
- android中,使用ant多渠道打包时出现Perhaps JAVA_HOME does not point to the JDK问题的解决方法
- 【原】关于使用jieba分词+PyInstaller进行打包时出现的一些问题的解决方法
- maven出现(请使用-source 5 或者更高版本以启用XX)问题解决
- MAVEN 打包时出现多余的类的问题
- 解决使用maven的java web项目导入后出现的有关问题 -cannot be read or is not a valid ZIP file
- 使用maven-build时Debug断点出现无法找到源问题