首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

Spring框架-Java学习路线课程:Spring的扩展配置

  • 25-02-21 23:22
  • 3172
  • 5101
blog.csdn.net

本博客地址 | GitHub | 更多资源免费下载

Spring的扩展配置

文章目录

        • 1、使用properties属性文件方式配置数据源。
          • 1.1、在applicationContext.xml配置文件中,引入database.properties配置文件:
          • 1.2、测试类使用Junit单元测试输出:
          • 1.3、控制台输出结果:
        • 2、使用Jndi方式配置数据源。
          • 2.1、改造配置文件applicationContext.xml:
          • 2.2、注释配置文件applicationContext.xml中的数据源:
          • 2.3、找到安装Tomcat的文件夹,在conf目录下打开context.xml配置文件,添加如下代码:
          • 2.4、在包com.javaxyz.servlet下,创建UserServlet.java文件
          • 2.5、控制台输出结果:
        • 3、bug场景:引入database.properties配置文件时报错:

1、使用properties属性文件方式配置数据源。
1.1、在applicationContext.xml配置文件中,引入database.properties配置文件:
   
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
	<property name="location">
        
		<value>classpath:database.propertiesvalue>		
	property>

bean>

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
	
	<property name="driverClassName" value="${driver}">property>
	<property name="url" value="${url}">property>
	<property name="username" value="${user}">property>
	<property name="password" value="${password}">property>
bean>	
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
1.2、测试类使用Junit单元测试输出:
/*
 * add用户信息  UserService调用
 */
@Test
public void test() {
    ApplicationContext context = new ClassPathXmlApplicationContext(
        "applicationContext.xml");
    //原来是通过映射接口去调用
    //UserMapper userMapper = (UserMapper) context.getBean("userMapper");
    //获取所有JavaBean的名称
    String[] bean = context.getBeanDefinitionNames();
    for (String string : bean) {
        System.out.println(string);
    }
    //现在是通过业务接口去调用
    UserService service = (UserService) context.getBean("userService");
    User user = new User();
    user.setUserCode("zhangxiulian");
    user.setUserName("张秀连666");
    user.setUserPassword("123999");
    user.setGender(0);
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
    try {
        user.setBirthday(sdf.parse("2010-9-17"));
    } catch (ParseException e) {
        e.printStackTrace();
    }
    user.setPhone("13608880888");
    user.setAddress("养育巷49");
    user.setUserRole(2);
    user.setCreatedBy(1);
    user.setCreationDate(new Date());
    Integer userRole = 2;
    //int num = userMapper.addUser(user);
    int num = service.saveUser(user);
    if (num > 0) {
        logger.info("增加成功!");
    } else {
        logger.error("增加失败!");
    }
}	
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
1.3、控制台输出结果:
org.springframework.beans.factory.config.PropertyPlaceholderConfigurer#0
dataSource
sqlSessionFactory
org.mybatis.spring.mapper.MapperScannerConfigurer#0
userService
org.springframework.context.annotation.internalConfigurationAnnotationProcessor
org.springframework.context.annotation.internalAutowiredAnnotationProcessor
org.springframework.context.annotation.internalRequiredAnnotationProcessor
org.springframework.context.annotation.internalCommonAnnotationProcessor
org.springframework.context.annotation.ConfigurationClassPostProcessor.importAwareProcessor
userMapper
- (715 ms) - 2019-9-29 16:55:12[DEBUG](AbstractBeanFactory.java:243) Returning cached instance of singleton bean 'userService'
- (749 ms) - 2019-9-29 16:55:12[DEBUG](DataSourceUtils.java:110) Fetching JDBC Connection from DataSource
- (765 ms) - 2019-9-29 16:55:12[DEBUG](DataSourceUtils.java:327) Returning JDBC Connection to DataSource
- (766 ms) - 2019-9-29 16:55:12[ INFO](SpringTest.java:81) 增加成功!
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
2、使用Jndi方式配置数据源。
2.1、改造配置文件applicationContext.xml:

<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
	<property name="jndiName">
		<value>java:comp/env/jdbc/javavalue>		
	property>	
bean>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
2.2、注释配置文件applicationContext.xml中的数据源:

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
	
	<property name="driverClassName" value="${driver}">property>
	<property name="url" value="${url}">property>
	<property name="username" value="${user}">property>
	<property name="password" value="${password}">property>
bean>

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
2.3、找到安装Tomcat的文件夹,在conf目录下打开context.xml配置文件,添加如下代码:
<Resource name="jdbc/java" 
type="javax.sql.DataSource"
auth="Container"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql:///p19_java7_mybatis"
username="root"
password="aaa"
maxActive="100"
maxIdle="50"
maxWait="1000"
/>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
2.4、在包com.javaxyz.servlet下,创建UserServlet.java文件
/**
 * @Author:DongGaoYun
 * @Description:
 * @Date 2019-10-9 下午5:11:10
 * @Version 1.0
 * @Company: www.springhome.org
 */
package com.javaxyz.servlet;

import java.io.IOException;
import java.io.PrintWriter;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.log4j.Logger;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.javaxyz.entity.User;
import com.javaxyz.service.UserService;
import com.javaxyz.test.SpringTest;

/**
 * @ClassName:UserServlet.java
 * @Description:描述信息
 * @Author:DongGaoYun
 * @Author English name:Andy 
 * @URL:www.javaxyz.com 或 www.gyun.org
 * @Email:[email protected]
 * @QQ:1050968899
 * @WeiXin:QingYunJiao
 * @WeiXinGongZhongHao: JavaForum
 * @Date:2019-10-9 下午5:11:10
 * @Version:1.0
 */
public class UserServlet extends HttpServlet {
	private static Logger logger = Logger.getLogger(UserServlet.class);

	/**
	 * The doGet method of the servlet. 
* * This method is called when a form has its tag value method equals to get. * * @param request * the request send by the client to the server * @param response * the response send by the server to the client * @throws ServletException * if an error occurred * @throws IOException * if an error occurred */
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); } /** * The doPost method of the servlet.
* * This method is called when a form has its tag value method equals to * post. * * @param request * the request send by the client to the server * @param response * the response send by the server to the client * @throws ServletException * if an error occurred * @throws IOException * if an error occurred */
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { /* * add用户信息 UserService调用 配置声明式事务 */ ApplicationContext context = new ClassPathXmlApplicationContext( "applicationContext.xml"); // 原来是通过映射接口去调用 // UserMapper userMapper = (UserMapper) context.getBean("userMapper"); //获取所有JavaBean的名称 String[] bean = context.getBeanDefinitionNames(); for (String string : bean) { System.out.println(string); } // 现在是通过业务接口去调用 UserService service = (UserService) context.getBean("userService"); User user = new User(); user.setUserCode("zhangxiulian"); user.setUserName("张秀连666"); user.setUserPassword("123999"); user.setGender(0); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); try { user.setBirthday(sdf.parse("2010-9-17")); } catch (ParseException e) { e.printStackTrace(); } user.setPhone("13608880888"); user.setAddress("养育巷49"); user.setUserRole(2); user.setCreatedBy(1); user.setCreationDate(new Date()); Integer userRole = 2; // int num = userMapper.addUser(user); List<User> listUsers = new ArrayList<User>(); listUsers.add(user); listUsers.add(user); int num = service.saveUser(listUsers); if (num > 0) { logger.info("增加成功!"); } else { logger.error("增加失败!"); } } }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • 124
  • 125
  • 126
  • 127
  • 128

注意:使用jndi数据源,显示结果需要启动Tomcat服务器,执行web路径: http://localhost:9999/java7_chapter7_spring2_jndi/userServlet

2.5、控制台输出结果:
- (1061 ms) - 2019-10-9 17:15:13[DEBUG](PropertySourcesPropertyResolver.java:103) Could not find key 'spring.liveBeansView.mbeanDomain' in any property source. Returning [null]
org.springframework.beans.factory.config.PropertyPlaceholderConfigurer#0
dataSource
sqlSessionFactory
org.mybatis.spring.mapper.MapperScannerConfigurer#0
userService
org.springframework.context.annotation.internalConfigurationAnnotationProcessor
org.springframework.context.annotation.internalAutowiredAnnotationProcessor
org.springframework.context.annotation.internalRequiredAnnotationProcessor
org.springframework.context.annotation.internalCommonAnnotationProcessor
transactionManager
org.springframework.aop.config.internalAutoProxyCreator
org.springframework.transaction.annotation.AnnotationTransactionAttributeSource#0
org.springframework.transaction.interceptor.TransactionInterceptor#0
org.springframework.transaction.config.internalTransactionAdvisor
org.springframework.context.annotation.ConfigurationClassPostProcessor.importAwareProcessor
userMapper
- (1061 ms) - 2019-10-9 17:15:13[DEBUG](AbstractBeanFactory.java:243) Returning cached instance of singleton bean 'userService'
- (1063 ms) - 2019-10-9 17:15:13[DEBUG](AbstractBeanFactory.java:243) Returning cached instance of singleton bean 'org.springframework.transaction.interceptor.TransactionInterceptor#0'
- (1066 ms) - 2019-10-9 17:15:13[DEBUG](AbstractFallbackTransactionAttributeSource.java:107) Adding transactional method 'UserServiceImpl.saveUser' with attribute: PROPAGATION_REQUIRED,ISOLATION_DEFAULT; ''
- (1069 ms) - 2019-10-9 17:15:13[DEBUG](AbstractBeanFactory.java:243) Returning cached instance of singleton bean 'transactionManager'
- (1076 ms) - 2019-10-9 17:15:13[DEBUG](AbstractPlatformTransactionManager.java:366) Creating new transaction with name [com.javaxyz.service.impl.UserServiceImpl.saveUser]: PROPAGATION_REQUIRED,ISOLATION_DEFAULT; ''
- (1078 ms) - 2019-10-9 17:15:13[DEBUG](DataSourceTransactionManager.java:204) Acquired Connection [jdbc:mysql:///p19_java7_mybatis, UserName=root@localhost, MySQL-AB JDBC Driver] for JDBC transaction
- (1087 ms) - 2019-10-9 17:15:13[DEBUG](DataSourceTransactionManager.java:221) Switching JDBC Connection [jdbc:mysql:///p19_java7_mybatis, UserName=root@localhost, MySQL-AB JDBC Driver] to manual commit
- (1093 ms) - 2019-10-9 17:15:13[DEBUG](JakartaCommonsLoggingImpl.java:46) Creating a new SqlSession
- (1099 ms) - 2019-10-9 17:15:13[DEBUG](JakartaCommonsLoggingImpl.java:46) Registering transaction synchronization for SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@1cd1130a]
- (1138 ms) - 2019-10-9 17:15:13[DEBUG](JakartaCommonsLoggingImpl.java:46) JDBC Connection [jdbc:mysql:///p19_java7_mybatis, UserName=root@localhost, MySQL-AB JDBC Driver] will be managed by Spring
- (1141 ms) - 2019-10-9 17:15:13[DEBUG](JakartaCommonsLoggingImpl.java:46) ooo Using Connection [jdbc:mysql:///p19_java7_mybatis, UserName=root@localhost, MySQL-AB JDBC Driver]
- (1146 ms) - 2019-10-9 17:15:13[DEBUG](JakartaCommonsLoggingImpl.java:46) ==>  Preparing: INSERT INTO smbms_user (userCode, userName, userPassword, gender, birthday, phone, address, userRole, createdBy, creationDate) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?); 
- (1172 ms) - 2019-10-9 17:15:13[DEBUG](JakartaCommonsLoggingImpl.java:46) ==> Parameters: zhangxiulian(String), 张秀连666(String), 123999(String), 0(Integer), 2010-09-17 00:00:00.0(Timestamp), 13608880888(String), 养育巷49(String), 2(Integer), 1(Integer), 2019-10-09 17:15:13.769(Timestamp)
- (1175 ms) - 2019-10-9 17:15:13[DEBUG](JakartaCommonsLoggingImpl.java:46) Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@1cd1130a]
- (1176 ms) - 2019-10-9 17:15:13[DEBUG](JakartaCommonsLoggingImpl.java:46) Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@1cd1130a] from current transaction
- (1177 ms) - 2019-10-9 17:15:13[DEBUG](JakartaCommonsLoggingImpl.java:46) ooo Using Connection [jdbc:mysql:///p19_java7_mybatis, UserName=root@localhost, MySQL-AB JDBC Driver]
- (1178 ms) - 2019-10-9 17:15:13[DEBUG](JakartaCommonsLoggingImpl.java:46) ==>  Preparing: INSERT INTO smbms_user (userCode, userName, userPassword, gender, birthday, phone, address, userRole, createdBy, creationDate) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?); 
- (1178 ms) - 2019-10-9 17:15:13[DEBUG](JakartaCommonsLoggingImpl.java:46) ==> Parameters: zhangxiulian(String), 张秀连666(String), 123999(String), 0(Integer), 2010-09-17 00:00:00.0(Timestamp), 13608880888(String), 养育巷49(String), 2(Integer), 1(Integer), 2019-10-09 17:15:13.769(Timestamp)
- (1180 ms) - 2019-10-9 17:15:13[DEBUG](JakartaCommonsLoggingImpl.java:46) Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@1cd1130a]
- (1180 ms) - 2019-10-9 17:15:13[DEBUG](AbstractPlatformTransactionManager.java:753) Initiating transaction commit
- (1181 ms) - 2019-10-9 17:15:13[DEBUG](DataSourceTransactionManager.java:267) Committing JDBC transaction on Connection [jdbc:mysql:///p19_java7_mybatis, UserName=root@localhost, MySQL-AB JDBC Driver]
- (1188 ms) - 2019-10-9 17:15:13[DEBUG](JakartaCommonsLoggingImpl.java:46) Transaction synchronization committing SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@1cd1130a]
- (1188 ms) - 2019-10-9 17:15:13[DEBUG](JakartaCommonsLoggingImpl.java:46) Transaction synchronization closing SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@1cd1130a]
- (1191 ms) - 2019-10-9 17:15:13[DEBUG](DataSourceTransactionManager.java:325) Releasing JDBC Connection [jdbc:mysql:///p19_java7_mybatis, UserName=root@localhost, MySQL-AB JDBC Driver] after transaction
- (1191 ms) - 2019-10-9 17:15:13[DEBUG](DataSourceUtils.java:327) Returning JDBC Connection to DataSource
- (1192 ms) - 2019-10-9 17:15:13[ INFO](UserServlet.java:126) 增加成功!
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
3、bug场景:引入database.properties配置文件时报错:
  • 报错详情:
- (369 ms) - 2019-10-9 16:34:56[ WARN](AbstractApplicationContext.java:486) Exception encountered during context initialization - cancelling refresh attempt
org.springframework.beans.factory.BeanDefinitionStoreException: Invalid bean definition with name 'dataSource' defined in class path resource [applicationContext.xml]: Could not resolve placeholder 'users' in string value "${users}"; nested exception is java.lang.IllegalArgumentException: Could not resolve placeholder 'users' in string value "${users}"
	at org.springframework.beans.factory.config.PlaceholderConfigurerSupport.doProcessProperties(PlaceholderConfigurerSupport.java:209)
	at org.springframework.beans.factory.config.PropertyPlaceholderConfigurer.processProperties(PropertyPlaceholderConfigurer.java:223)
	at org.springframework.beans.factory.config.PropertyResourceConfigurer.postProcessBeanFactory(PropertyResourceConfigurer.java:84)
	at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:696)
	at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:671)
	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:461)
	at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139)
	at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:83)
	at com.javaxyz.test.SpringTest.test9(SpringTest.java:48)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:606)
	at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)
	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)
	at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
	at org.junit.runners.BlockJUnit4ClassRunner.runNotIgnored(BlockJUnit4ClassRunner.java:79)
	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:71)
	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:49)
	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193)
	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52)
	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191)
	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42)
	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184)
	at org.junit.runners.ParentRunner.run(ParentRunner.java:236)
	at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
	at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
Caused by: java.lang.IllegalArgumentException: Could not resolve placeholder 'users' in string value "${users}"
	at org.springframework.util.PropertyPlaceholderHelper.parseStringValue(PropertyPlaceholderHelper.java:173)
	at org.springframework.util.PropertyPlaceholderHelper.replacePlaceholders(PropertyPlaceholderHelper.java:125)
	at org.springframework.beans.factory.config.PropertyPlaceholderConfigurer$PlaceholderResolvingStringValueResolver.resolveStringValue(PropertyPlaceholderConfigurer.java:258)
	at org.springframework.beans.factory.config.BeanDefinitionVisitor.resolveStringValue(BeanDefinitionVisitor.java:282)
	at org.springframework.beans.factory.config.BeanDefinitionVisitor.resolveValue(BeanDefinitionVisitor.java:204)
	at org.springframework.beans.factory.config.BeanDefinitionVisitor.visitPropertyValues(BeanDefinitionVisitor.java:141)
	at org.springframework.beans.factory.config.BeanDefinitionVisitor.visitBeanDefinition(BeanDefinitionVisitor.java:82)
	at org.springframework.beans.factory.config.PlaceholderConfigurerSupport.doProcessProperties(PlaceholderConfigurerSupport.java:206)
	... 31 more
- (371 ms) - 2019-10-9 16:34:56[ INFO](DefaultSingletonBeanRegistry.java:444) Destroying singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@6a109ac: defining beans [org.springframework.beans.factory.config.PropertyPlaceholderConfigurer#0,dataSource,sqlSessionFactory,org.mybatis.spring.mapper.MapperScannerConfigurer#0,userService,org.springframework.context.annotation.internalConfigurationAnnotationProcessor,org.springframework.context.annotation.internalAutowiredAnnotationProcessor,org.springframework.context.annotation.internalRequiredAnnotationProcessor,org.springframework.context.annotation.internalCommonAnnotationProcessor,transactionManager,org.springframework.aop.config.internalAutoProxyCreator,org.springframework.transaction.annotation.AnnotationTransactionAttributeSource#0,org.springframework.transaction.interceptor.TransactionInterceptor#0,org.springframework.transaction.config.internalTransactionAdvisor,org.springframework.context.annotation.ConfigurationClassPostProcessor.importAwareProcessor,userMapper]; root of factory hierarchy

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 重点:
Caused by: java.lang.IllegalArgumentException: Could not resolve placeholder 'users' in string value "${users}"
意思是:无法解析字符串值“${users}”中的占位符“users”
  • 1
  • 2
  • 报错位置:
		<property name="username" value="${users}">property>
  • 1
  • 报错原因是配置文件database.properties里用户名的key是user,而不是users
    user=root
  • 1
  • 正确的配置方式:
		<property name="username" value="${user}">property>
  • 1

———— 精 选 文 章 ————
  1. Java入门-Java学习路线课程第一课:初识JAVA
  2. Java入门-Java学习路线课程第二课:变量与数据类型
  3. Java入门-Java学习路线课程第三课:选择结构
  4. Java入门-Java学习路线课程第四课:循环结构
  5. Java入门-Java学习路线课程第五课:一维数组
  6. Java入门-Java学习路线课程第六课:二维数组
  7. Java入门-Java学习路线课程第七课:类和对象
  8. Java入门-Java学习路线课程第八课:方法和方法重载
  9. Java入门-Java学习路线扩展课程:equals的使用
  10. Java入门-Java学习路线课程面试篇:取商 / 和取余(模) % 符号的使用
  11. Java进阶-Java学习路线课程第一课:Java集合框架-ArrayList和LinkedList的使用
  12. Java进阶-Java学习路线课程第二课:Java集合框架-HashSet的使用及去重原理
  13. Spring框架-Java学习路线课程第一课:Spring核心
  14. Springboot框架-Java学习路线课程:Springboot框架的搭建之maven的配置
  15. java学习:在给学生演示用Myeclipse10.7.1工具生成War时,意外报错:SECURITY: INTEGRITY CHECK ERROR
  16. 使用jquery发送Ajax请求的几种异步刷新方式
  17. idea Springboot启动时内嵌tomcat报错- An incompatible version [1.1.33] of the APR based Apache Tomcat Native
  18. 一个简单的SSM框架Demo(登录(包含拦截器)和注销

更多免费资源请关注微信公众号:

文章知识点与官方知识档案匹配,可进一步学习相关知识
Java技能树首页概览150366 人正在系统学习中
注:本文转载自blog.csdn.net的青云交的文章"https://blog.csdn.net/atgfg/article/details/102528068"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2491) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

101
推荐
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2025 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top