Configuration servicename.MapServer can not be started.

在使用ArcGIS Server发布包含MapService且勾选MobileDataAccess选项时,若遇到服务启动失败的问题,可通过设置自定义范围来解决。具体操作是在mxd文档的dataframe属性中,选择ExtentUsedByFullExtentCommand—>SpecifyExtent,从而避免默认范围不可接受导致的错误。

ArcGIS Server中,发布移动地图服务时(Map Service勾选Mobile Data Access),许多朋友最常碰到的一个问题就是在启动服务时遇到错误:

Configuration servicename.MapServer cannot be started.
Server Object instance creation failed on machine yourserver.

有点不知所措。其实只需要查看server的日志即可找到原因。日志中写到:

MobileServer requires a custom extent tobe set.  The default extent is not acceptable (union of all layers).

解决办法:在mxd文档的dataframe属性,选择Extent Used By Full ExtentCommand–>Specify Extent,指定一个自定义的范围即可。

D:\Environment\Java\jdk1.8\bin\java.exe -agentlib:jdwp=transport=dt_socket,address=127.0.0.1:59709,suspend=y,server=n -XX:TieredStopAtLevel=1 -noverify -Dspring.output.ansi.enabled=always -Dcom.sun.management.jmxremote -Dspring.jmx.enabled=true -Dspring.liveBeansView.mbeanDomain -Dspring.application.admin.enabled=true "-Dmanagement.endpoints.jmx.exposure.include=*" -javaagent:C:\Users\WeiMu\AppData\Local\JetBrains\IntelliJIdea2024.1\captureAgent\debugger-agent.jar=file:/C:/Users/WeiMu/AppData/Local/Temp/capture.props -Dfile.encoding=UTF-8 -classpath "D:\Compiler-Tools\IntelliJ IDEA 2024.1\lib\idea_rt.jar" com.intellij.rt.execution.CommandLineWrapper C:\Users\WeiMu\AppData\Local\Temp\idea_classpath976186914 com.edms.netdisk.EdmsNetDiskApplication Connected to the target VM, address: '127.0.0.1:59709', transport: 'socket' . ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v2.7.7) 2025-08-29 16:36:58.134 INFO 39024 --- [ main] com.alibaba.nacos.common.remote.client : [RpcClientFactory] create a new rpc client of 815a9e06-0878-48f8-87db-d969827e025c_config-0 2025-08-29 16:36:58.195 INFO 39024 --- [ main] org.reflections.Reflections : Reflections took 39 ms to scan 1 urls, producing 3 keys and 6 values 2025-08-29 16:36:58.228 INFO 39024 --- [ main] org.reflections.Reflections : Reflections took 14 ms to scan 1 urls, producing 4 keys and 9 values 2025-08-29 16:36:58.241 INFO 39024 --- [ main] org.reflections.Reflections : Reflections took 11 ms to scan 1 urls, producing 3 keys and 10 values 2025-08-29 16:36:58.593 INFO 39024 --- [ main] org.reflections.Reflections : Reflections took 348 ms to scan 457 urls, producing 0 keys and 0 values 2025-08-29 16:36:58.603 INFO 39024 --- [ main] org.reflections.Reflections : Reflections took 8 ms to scan 1 urls, producing 1 keys and 5 values 2025-08-29 16:36:58.617 INFO 39024 --- [ main] org.reflections.Reflections : Reflections took 12 ms to scan 1 urls, producing 1 keys and 7 values 2025-08-29 16:36:58.629 INFO 39024 --- [ main] org.reflections.Reflections : Reflections took 10 ms to scan 1 urls, producing 2 keys and 8 values 2025-08-29 16:36:58.904 INFO 39024 --- [ main] org.reflections.Reflections : Reflections took 273 ms to scan 457 urls, producing 0 keys and 0 values 2025-08-29 16:36:58.908 INFO 39024 --- [ main] com.alibaba.nacos.common.remote.client : [815a9e06-0878-48f8-87db-d969827e025c_config-0] RpcClient init label, labels = {module=config, Vipserver-Tag=null, source=sdk, Amory-Tag=null, Location-Tag=null, taskId=0, AppName=unknown} 2025-08-29 16:36:58.908 INFO 39024 --- [ main] com.alibaba.nacos.common.remote.client : [815a9e06-0878-48f8-87db-d969827e025c_config-0] Register server push request handler:com.alibaba.nacos.client.config.impl.ClientWorker$ConfigRpcTransportClient$$Lambda$369/1043584830 2025-08-29 16:36:58.908 INFO 39024 --- [ main] com.alibaba.nacos.common.remote.client : [815a9e06-0878-48f8-87db-d969827e025c_config-0] Register server push request handler:com.alibaba.nacos.client.config.impl.ClientWorker$ConfigRpcTransportClient$$Lambda$370/1770125555 2025-08-29 16:36:58.909 INFO 39024 --- [ main] com.alibaba.nacos.common.remote.client : [815a9e06-0878-48f8-87db-d969827e025c_config-0] Registry connection listener to current client:com.alibaba.nacos.client.config.impl.ClientWorker$ConfigRpcTransportClient$1 2025-08-29 16:36:58.909 INFO 39024 --- [ main] com.alibaba.nacos.common.remote.client : [815a9e06-0878-48f8-87db-d969827e025c_config-0] RpcClient init, ServerListFactory = com.alibaba.nacos.client.config.impl.ClientWorker$ConfigRpcTransportClient$2 2025-08-29 16:36:58.917 INFO 39024 --- [ main] com.alibaba.nacos.common.remote.client : [815a9e06-0878-48f8-87db-d969827e025c_config-0] Try to connect to server on start up, server: {serverIp = '127.0.0.1', server main port = 8848} 2025-08-29 16:37:01.208 INFO 39024 --- [ main] com.alibaba.nacos.common.remote.client : [815a9e06-0878-48f8-87db-d969827e025c_config-0] Success to connect to server [127.0.0.1:8848] on start up, connectionId = 1756456621030_127.0.0.1_59786 2025-08-29 16:37:01.209 INFO 39024 --- [t.remote.worker] com.alibaba.nacos.common.remote.client : [815a9e06-0878-48f8-87db-d969827e025c_config-0] Notify connected event to listeners. 2025-08-29 16:37:01.209 INFO 39024 --- [ main] com.alibaba.nacos.common.remote.client : [815a9e06-0878-48f8-87db-d969827e025c_config-0] Register server push request handler:com.alibaba.nacos.common.remote.client.RpcClient$ConnectResetRequestHandler 2025-08-29 16:37:01.210 INFO 39024 --- [ main] com.alibaba.nacos.common.remote.client : [815a9e06-0878-48f8-87db-d969827e025c_config-0] Register server push request handler:com.alibaba.nacos.common.remote.client.RpcClient$$Lambda$379/485701373 2025-08-29 16:37:01.278 WARN 39024 --- [ main] c.a.c.n.c.NacosPropertySourceBuilder : Ignore the empty nacos configuration and get it based on dataId[edms-netdisk] & group[DEFAULT_GROUP] 2025-08-29 16:37:01.281 WARN 39024 --- [ main] c.a.c.n.c.NacosPropertySourceBuilder : Ignore the empty nacos configuration and get it based on dataId[edms-netdisk.yml] & group[DEFAULT_GROUP] 2025-08-29 16:37:01.293 INFO 39024 --- [ main] b.c.PropertySourceBootstrapConfiguration : Located property source: [BootstrapPropertySource {name='bootstrapProperties-edms-netdisk-dev.yml,DEFAULT_GROUP'}, BootstrapPropertySource {name='bootstrapProperties-edms-netdisk.yml,DEFAULT_GROUP'}, BootstrapPropertySource {name='bootstrapProperties-edms-netdisk,DEFAULT_GROUP'}, BootstrapPropertySource {name='bootstrapProperties-application-dev.yml,DEFAULT_GROUP'}] 2025-08-29 16:37:01.303 INFO 39024 --- [ main] com.edms.netdisk.EdmsNetDiskApplication : The following 1 profile is active: "dev" 2025-08-29 16:37:02.950 INFO 39024 --- [ main] .s.d.r.c.RepositoryConfigurationDelegate : Multiple Spring Data modules found, entering strict repository configuration mode 2025-08-29 16:37:02.953 INFO 39024 --- [ main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data Redis repositories in DEFAULT mode. 2025-08-29 16:37:02.986 INFO 39024 --- [ main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 17 ms. Found 0 Redis repository interfaces. 2025-08-29 16:37:03.359 INFO 39024 --- [ main] o.s.cloud.context.scope.GenericScope : BeanFactory id=5c5d8be8-c9b4-38b9-9f90-0a8c2bf02ce4 2025-08-29 16:37:03.462 INFO 39024 --- [ main] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.cloud.commons.config.CommonsConfigAutoConfiguration' of type [org.springframework.cloud.commons.config.CommonsConfigAutoConfiguration] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) 2025-08-29 16:37:03.465 INFO 39024 --- [ main] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.cloud.client.loadbalancer.LoadBalancerDefaultMappingsProviderAutoConfiguration' of type [org.springframework.cloud.client.loadbalancer.LoadBalancerDefaultMappingsProviderAutoConfiguration] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) 2025-08-29 16:37:03.466 INFO 39024 --- [ main] trationDelegate$BeanPostProcessorChecker : Bean 'loadBalancerClientsDefaultsMappingsProvider' of type [org.springframework.cloud.client.loadbalancer.LoadBalancerDefaultMappingsProviderAutoConfiguration$$Lambda$516/1979080020] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) 2025-08-29 16:37:03.467 INFO 39024 --- [ main] trationDelegate$BeanPostProcessorChecker : Bean 'defaultsBindHandlerAdvisor' of type [org.springframework.cloud.commons.config.DefaultsBindHandlerAdvisor] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) 2025-08-29 16:37:03.470 INFO 39024 --- [ main] trationDelegate$BeanPostProcessorChecker : Bean 'stringToNoneShardingStrategyConfigurationConverter' of type [org.apache.shardingsphere.spring.boot.converter.StringToNoneShardingStrategyConfigurationConverter] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) 2025-08-29 16:37:03.475 INFO 39024 --- [ main] trationDelegate$BeanPostProcessorChecker : Bean 'spring.shardingsphere-org.apache.shardingsphere.spring.boot.prop.SpringBootPropertiesConfiguration' of type [org.apache.shardingsphere.spring.boot.prop.SpringBootPropertiesConfiguration] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) 2025-08-29 16:37:03.934 INFO 39024 --- [ main] trationDelegate$BeanPostProcessorChecker : Bean 'org.apache.shardingsphere.spring.boot.ShardingSphereAutoConfiguration' of type [org.apache.shardingsphere.spring.boot.ShardingSphereAutoConfiguration$$EnhancerBySpringCGLIB$$e4aed4a3] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) 2025-08-29 16:37:04.143 INFO 39024 --- [ main] trationDelegate$BeanPostProcessorChecker : Bean 'spring.datasource.dynamic-com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DynamicDataSourceProperties' of type [com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DynamicDataSourceProperties] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) 2025-08-29 16:37:04.155 INFO 39024 --- [ main] trationDelegate$BeanPostProcessorChecker : Bean 'com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DynamicDataSourceAutoConfiguration' of type [com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DynamicDataSourceAutoConfiguration$$EnhancerBySpringCGLIB$$6223225b] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) 2025-08-29 16:37:04.170 INFO 39024 --- [ main] trationDelegate$BeanPostProcessorChecker : Bean 'dsProcessor' of type [com.baomidou.dynamic.datasource.processor.DsHeaderProcessor] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) 2025-08-29 16:37:04.665 INFO 39024 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 9061 (http) 2025-08-29 16:37:04.679 INFO 39024 --- [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat] 2025-08-29 16:37:04.679 INFO 39024 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.70] 2025-08-29 16:37:04.976 INFO 39024 --- [ main] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext 2025-08-29 16:37:04.976 INFO 39024 --- [ main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 3635 ms 2025-08-29 16:37:05.138 WARN 39024 --- [ main] c.b.d.d.DynamicRoutingDataSource : dynamic-datasource initial loaded [0] datasource,Please add your primary datasource or check your configuration 2025-08-29 16:37:05.688 INFO 39024 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting... 2025-08-29 16:37:07.378 INFO 39024 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Start completed. 2025-08-29 16:37:09.775 WARN 39024 --- [ main] ConfigServletWebServerApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'diskCommonBatchInfoController': Unsatisfied dependency expressed through field 'diskCommonBatchInfoService'; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'diskCommonBatchInfoServiceImpl': Unsatisfied dependency expressed through field 'diskCommonBatchInfoMapper'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'diskCommonBatchInfoMapper' defined in file [D:\ezsoft\projects\edms-cloud\edms-modules\edms-netdisk\target\classes\com\edms\netdisk\mapper\DiskCommonBatchInfoMapper.class]: Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: Property 'sqlSessionFactory' or 'sqlSessionTemplate' are required 2025-08-29 16:37:09.775 INFO 39024 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown initiated... 2025-08-29 16:37:09.777 INFO 39024 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown completed. 2025-08-29 16:37:09.778 INFO 39024 --- [ main] c.b.d.d.DynamicRoutingDataSource : dynamic-datasource start closing .... 2025-08-29 16:37:09.778 INFO 39024 --- [ main] c.b.d.d.DynamicRoutingDataSource : dynamic-datasource all closed success,bye 2025-08-29 16:37:09.779 INFO 39024 --- [ main] o.apache.catalina.core.StandardService : Stopping service [Tomcat] 2025-08-29 16:37:09.784 WARN 39024 --- [ main] o.a.c.loader.WebappClassLoaderBase : The web application [ROOT] appears to have started a thread named [ShardingSphere-SchemaMetaDataLoaderEngine-0] but has failed to stop it. This is very likely to create a memory leak. Stack trace of thread: sun.misc.Unsafe.park(Native Method) java.util.concurrent.locks.LockSupport.park(LockSupport.java:175) java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039) java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:442) java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1074) java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1134) java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) java.lang.Thread.run(Thread.java:748) 2025-08-29 16:37:09.801 INFO 39024 --- [ main] ConditionEvaluationReportLoggingListener : Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled. 2025-08-29 16:37:09.839 ERROR 39024 --- [ main] o.s.boot.SpringApplication : Application run failed org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'diskCommonBatchInfoController': Unsatisfied dependency expressed through field 'diskCommonBatchInfoService'; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'diskCommonBatchInfoServiceImpl': Unsatisfied dependency expressed through field 'diskCommonBatchInfoMapper'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'diskCommonBatchInfoMapper' defined in file [D:\ezsoft\projects\edms-cloud\edms-modules\edms-netdisk\target\classes\com\edms\netdisk\mapper\DiskCommonBatchInfoMapper.class]: Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: Property 'sqlSessionFactory' or 'sqlSessionTemplate' are required at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.resolveFieldValue(AutowiredAnnotationBeanPostProcessor.java:660) ~[spring-beans-5.3.24.jar:5.3.24] at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:640) ~[spring-beans-5.3.24.jar:5.3.24] at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:119) ~[spring-beans-5.3.24.jar:5.3.24] at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessProperties(AutowiredAnnotationBeanPostProcessor.java:399) ~[spring-beans-5.3.24.jar:5.3.24] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1431) ~[spring-beans-5.3.24.jar:5.3.24] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:619) ~[spring-beans-5.3.24.jar:5.3.24] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542) ~[spring-beans-5.3.24.jar:5.3.24] at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) ~[spring-beans-5.3.24.jar:5.3.24] at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-5.3.24.jar:5.3.24] at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) ~[spring-beans-5.3.24.jar:5.3.24] at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) ~[spring-beans-5.3.24.jar:5.3.24] at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:955) ~[spring-beans-5.3.24.jar:5.3.24] at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:918) ~[spring-context-5.3.24.jar:5.3.24] at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:583) ~[spring-context-5.3.24.jar:5.3.24] at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:147) ~[spring-boot-2.7.7.jar:2.7.7] at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:731) [spring-boot-2.7.7.jar:2.7.7] at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:408) [spring-boot-2.7.7.jar:2.7.7] at org.springframework.boot.SpringApplication.run(SpringApplication.java:307) [spring-boot-2.7.7.jar:2.7.7] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1303) [spring-boot-2.7.7.jar:2.7.7] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1292) [spring-boot-2.7.7.jar:2.7.7] at com.edms.netdisk.EdmsNetDiskApplication.main(EdmsNetDiskApplication.java:19) [classes/:na] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_202] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_202] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_202] at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_202] at com.intellij.rt.execution.CommandLineWrapper.main(CommandLineWrapper.java:65) [idea_rt.jar:na] Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'diskCommonBatchInfoServiceImpl': Unsatisfied dependency expressed through field 'diskCommonBatchInfoMapper'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'diskCommonBatchInfoMapper' defined in file [D:\ezsoft\projects\edms-cloud\edms-modules\edms-netdisk\target\classes\com\edms\netdisk\mapper\DiskCommonBatchInfoMapper.class]: Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: Property 'sqlSessionFactory' or 'sqlSessionTemplate' are required at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.resolveFieldValue(AutowiredAnnotationBeanPostProcessor.java:660) ~[spring-beans-5.3.24.jar:5.3.24] at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:640) ~[spring-beans-5.3.24.jar:5.3.24] at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:119) ~[spring-beans-5.3.24.jar:5.3.24] at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessProperties(AutowiredAnnotationBeanPostProcessor.java:399) ~[spring-beans-5.3.24.jar:5.3.24] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1431) ~[spring-beans-5.3.24.jar:5.3.24] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:619) ~[spring-beans-5.3.24.jar:5.3.24] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542) ~[spring-beans-5.3.24.jar:5.3.24] at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) ~[spring-beans-5.3.24.jar:5.3.24] at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-5.3.24.jar:5.3.24] at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) ~[spring-beans-5.3.24.jar:5.3.24] at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) ~[spring-beans-5.3.24.jar:5.3.24] at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276) ~[spring-beans-5.3.24.jar:5.3.24] at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1391) ~[spring-beans-5.3.24.jar:5.3.24] at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1311) ~[spring-beans-5.3.24.jar:5.3.24] at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.resolveFieldValue(AutowiredAnnotationBeanPostProcessor.java:657) ~[spring-beans-5.3.24.jar:5.3.24] ... 25 common frames omitted Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'diskCommonBatchInfoMapper' defined in file [D:\ezsoft\projects\edms-cloud\edms-modules\edms-netdisk\target\classes\com\edms\netdisk\mapper\DiskCommonBatchInfoMapper.class]: Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: Property 'sqlSessionFactory' or 'sqlSessionTemplate' are required at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1804) ~[spring-beans-5.3.24.jar:5.3.24] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:620) ~[spring-beans-5.3.24.jar:5.3.24] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542) ~[spring-beans-5.3.24.jar:5.3.24] at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) ~[spring-beans-5.3.24.jar:5.3.24] at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-5.3.24.jar:5.3.24] at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) ~[spring-beans-5.3.24.jar:5.3.24] at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) ~[spring-beans-5.3.24.jar:5.3.24] at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276) ~[spring-beans-5.3.24.jar:5.3.24] at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1391) ~[spring-beans-5.3.24.jar:5.3.24] at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1311) ~[spring-beans-5.3.24.jar:5.3.24] at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.resolveFieldValue(AutowiredAnnotationBeanPostProcessor.java:657) ~[spring-beans-5.3.24.jar:5.3.24] ... 39 common frames omitted Caused by: java.lang.IllegalArgumentException: Property 'sqlSessionFactory' or 'sqlSessionTemplate' are required at org.springframework.util.Assert.notNull(Assert.java:201) ~[spring-core-5.3.24.jar:5.3.24] at org.mybatis.spring.support.SqlSessionDaoSupport.checkDaoConfig(SqlSessionDaoSupport.java:122) ~[mybatis-spring-2.0.6.jar:2.0.6] at org.mybatis.spring.mapper.MapperFactoryBean.checkDaoConfig(MapperFactoryBean.java:73) ~[mybatis-spring-2.0.6.jar:2.0.6] at org.springframework.dao.support.DaoSupport.afterPropertiesSet(DaoSupport.java:44) ~[spring-tx-5.3.24.jar:5.3.24] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1863) ~[spring-beans-5.3.24.jar:5.3.24] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1800) ~[spring-beans-5.3.24.jar:5.3.24] ... 49 common frames omitted 2025-08-29 16:37:09.840 WARN 39024 --- [ Thread-5] c.a.n.common.http.HttpClientBeanHolder : [HttpClientBeanHolder] Start destroying common HttpClient 2025-08-29 16:37:09.861 WARN 39024 --- [ Thread-12] c.a.nacos.common.notify.NotifyCenter : [NotifyCenter] Start destroying Publisher 2025-08-29 16:37:09.861 WARN 39024 --- [ Thread-12] c.a.nacos.common.notify.NotifyCenter : [NotifyCenter] Destruction of the end 2025-08-29 16:37:09.862 WARN 39024 --- [ Thread-5] c.a.n.common.http.HttpClientBeanHolder : [HttpClientBeanHolder] Destruction of the end Disconnected from the target VM, address: '127.0.0.1:59709', transport: 'socket' Process finished with exit code 1 这是什么错误
08-30
<think> 我们面对的问题是:Spring Boot 应用启动时出现 `UnsatisfiedDependencyException`,最终原因是创建 `diskCommonBatchInfoMapper` 时失败,提示 `Property 'sqlSessionFactory' or 'sqlSessionTemplate' are required`。这表明 MyBatis 在初始化 Mapper 接口时,无法找到必需的 `SqlSessionFactory` 或 `SqlSessionTemplate` 实例。 ### 原因分析 1. **MyBatis 核心组件缺失** - Spring 容器中缺少 `SqlSessionFactory` 或 `SqlSessionTemplate` 的 Bean 定义。 - 可能原因: - 未正确配置 MyBatis(缺少 `@MapperScan` 注解或 MyBatis 配置类)。 - 动态数据源(如分库分表组件)覆盖了默认的 MyBatis 配置,但未正确初始化自己的 `SqlSessionFactory`[^1]。 - 依赖冲突导致 MyBatis 自动配置失效(例如多个版本的 MyBatis 或 MyBatis-Spring 共存)。 2. **动态数据源配置问题** - 使用分库分表组件(如 ShardingSphere 或 dynamic-datasource)时,需要手动配置 `SqlSessionFactory` 以绑定到动态数据源。 - 如果组件配置错误(如数据源未成功初始化),会导致依赖它的 `SqlSessionFactory` 创建失败。 3. **依赖冲突** - 项目中可能存在多个版本的 MyBatis 相关依赖(如 `mybatis-spring`、`mybatis-spring-boot-starter` 等),导致自动配置类无法正常工作[^2]。 --- ### 解决方案 #### 步骤 1:显式配置 SqlSessionFactory 在 Spring Boot 配置类中添加以下代码: ```java @Configuration public class MyBatisConfig { // 注入动态数据源(由分表组件管理) @Autowired private DataSource dataSource; @Bean public SqlSessionFactory sqlSessionFactory() throws Exception { SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean(); factoryBean.setDataSource(dataSource); // 关键:绑定动态数据源 // 设置Mapper XML位置(按实际路径修改) factoryBean.setMapperLocations( new PathMatchingResourcePatternResolver() .getResources("classpath:mapper/*.xml")); return factoryBean.getObject(); } @Bean public SqlSessionTemplate sqlSessionTemplate() throws Exception { return new SqlSessionTemplate(sqlSessionFactory()); } } ``` #### 步骤 2:检查动态数据源配置 确保动态数据源已正确初始化: 1. **验证数据源 Bean 是否存在** 在启动类中添加测试代码: ```java @SpringBootApplication public class Application { public static void main(String[] args) { ConfigurableApplicationContext ctx = SpringApplication.run(Application.class, args); // 检查数据源 Bean String[] beanNames = ctx.getBeanNamesForType(DataSource.class); System.out.println("数据源Bean列表: " + Arrays.toString(beanNames)); } } ``` - 期望输出:包含动态数据源名称(如 `dynamicDataSource`)。 2. **确认分表规则加载** 检查 Nacos 中的配置是否包含完整数据源定义和分片规则(参考问题中的引用配置模板)。 #### 步骤 3:解决依赖冲突 在 `pom.xml` 中统一 MyBatis 相关依赖版本: ```xml <!-- 锁定 MyBatis 全家桶版本 --> <properties> <mybatis-spring-boot-starter.version>2.3.1</mybatis-spring-boot-starter.version> <dynamic-datasource-spring-boot-starter.version>3.6.1</dynamic-datasource-spring-boot-starter.version> </properties> <dependencies> <!-- MyBatis 核心 --> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>${mybatis-spring-boot-starter.version}</version> </dependency> <!-- 动态数据源(如使用) --> <dependency> <groupId>com.baomidou</groupId> <artifactId>dynamic-datasource-spring-boot-starter</artifactId> <version>${dynamic-datasource-spring-boot-starter.version}</version> <exclusions> <!-- 排除冲突的 MyBatis 依赖 --> <exclusion> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> </exclusion> <exclusion> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> </exclusion> </exclusions> </dependency> </dependencies> ``` #### 步骤 4:添加 Mapper 扫描注解 在启动类或配置类上添加 `@MapperScan`: ```java @SpringBootApplication @MapperScan("com.edms.netdisk.mapper") // 替换为你的 Mapper 包路径 public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } } ``` --- ### 故障排查流程图 ```mermaid graph TD A[启动报错:SqlSessionFactory缺失] --> B{是否配置动态数据源?} B -->|是| C[检查动态数据源初始化] C --> D[Nacos配置是否正确加载?] D -->|否| E[修复Nacos配置] D -->|是| F[检查依赖冲突] B -->|否| G[检查MyBatis自动配置] G --> H[是否有@MapperScan?] H -->|否| I[添加@MapperScan] H -->|是| J[检查Mapper XML路径] F --> K[执行mvn dependency:tree] K --> L{存在多个mybatis版本?} L -->|是| M[排除冲突依赖] L -->|否| N[检查SqlSessionFactory显式配置] ``` ### 补充说明 - **动态数据源与 MyBatis 的协作原理** 分表组件会替换默认数据源为 `DynamicDataSource`,但 `SqlSessionFactory` 仍需手动绑定到该数据源(见步骤 1)。 - **依赖冲突的典型表现** 若日志中出现 `ClassNotFoundException` 或 `NoSuchMethodError` 与 MyBatis 相关,基本可判定依赖冲突。 通过以上步骤,可解决因 `SqlSessionFactory` 缺失导致的级联依赖注入失败问题。核心在于 **确保动态数据源生效** 和 **消除 MyBatis 组件冲突**。 §§相关问题§§ 1. 如何验证 Spring 容器中 Bean 的依赖关系图? 2. MyBatis 动态数据源切换失败有哪些排查方法? 3. Nacos 配置动态刷新后数据源不生效怎么办? 4. Spring Boot 如何优雅地处理多数据源事务? </think> ### 原因分析:`UnsatisfiedDependencyException` 与 `SqlSessionFactory` 缺失问题 该错误链的根本原因是 **MyBatis 核心组件未正确初始化**,导致 Mapper 接口无法创建。具体分析如下: 1. **`SqlSessionFactory` 缺失(直接原因)** MyBatis 要求每个 Mapper 必须绑定到 `SqlSessionFactory` 或 `SqlSessionTemplate`。当出现以下情况时会触发该错误: - 未显式配置 `SqlSessionFactory` Bean - 动态数据源组件覆盖了默认的 MyBatis 自动配置 - 分表配置加载失败导致数据源未初始化 2. **动态数据源配置问题(深层原因)** 分表场景下(如使用 ShardingSphere 或 dynamic-datasource): ```mermaid graph TD A[Nacos 配置] --> B[动态数据源初始化] B --> C[SqlSessionFactory 创建] C --> D[Mapper 接口代理] ``` 任一环节失败都会导致级联错误,尤其是: - 分表规则配置错误(如 `actual-data-nodes` 路径不匹配) - 物理数据库表未创建 - 数据源连接参数错误 3. **依赖冲突(常见诱因)** 项目中同时存在多个 MyBatis 相关依赖时会产生冲突: ```java // 典型冲突组合 mybatis-spring-boot-starter(2.1.0) mybatis-plus-boot-starter(3.5.7) // 自带 MyBatis 3.5.x dynamic-datasource-spring-boot-starter // 可能引入其他版本 ``` 不同版本的 `SqlSessionFactoryBean` 初始化逻辑差异会导致组件创建失败[^2]。 --- ### 解决方案 #### 第一步:修复 MyBatis 核心配置 在配置类显式声明 Bean: ```java @Configuration public class MyBatisConfig { // 注入动态数据源(由分表组件创建) @Autowired private DataSource dataSource; @Bean public SqlSessionFactory sqlSessionFactory() throws Exception { SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean(); factoryBean.setDataSource(dataSource); // 关键绑定 factoryBean.setMapperLocations( new PathMatchingResourcePatternResolver() .getResources("classpath:mapper/*.xml")); return factoryBean.getObject(); } } ``` #### 第二步:验证分表配置 检查 Nacos 中的分表规则(示例): ```yaml spring: shardingsphere: datasource: names: ds0,ds1 # 分片数据源名称 ds0: url: jdbc:mysql://127.0.0.1:3306/db0?useSSL=false ds1: url: jdbc:mysql://127.0.0.1:3306/db1?useSSL=false rules: sharding: tables: disk_common_batch_info: # 对应Mapper操作的实体 actual-data-nodes: ds$->{0..1}.disk_common_batch_info_$->{0..3} table-strategy: standard: sharding-column: batch_id sharding-algorithm-name: mod4 ``` #### 第三步:解决依赖冲突 在 `pom.xml` 中统一版本: ```xml <!-- 锁定 MyBatis 核心版本 --> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.3.1</version> </dependency> <!-- 排除 dynamic-datasource 中的冲突包 --> <dependency> <groupId>com.baomidou</groupId> <artifactId>dynamic-datasource-spring-boot-starter</artifactId> <version>3.6.1</version> <exclusions> <exclusion> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> </exclusion> </exclusions> </dependency> ``` #### 第四步:验证物理表存在 在每个分片库执行 DDL: ```sql -- 在 ds0 库执行 CREATE TABLE disk_common_batch_info_0 (...); CREATE TABLE disk_common_batch_info_1 (...); -- 在 ds1 库执行 CREATE TABLE disk_common_batch_info_2 (...); CREATE TABLE disk_common_batch_info_3 (...); ``` --- ### 预防措施 1. **启动时检查配置加载**: ```java @SpringBootApplication public class Application { public static void main(String[] args) { ConfigurableApplicationContext ctx = SpringApplication.run(Application.class, args); // 检查数据源是否加载 Map<String, DataSource> datasources = ctx.getBeansOfType(DataSource.class); System.out.println("加载数据源数量: " + datasources.size()); } } ``` 2. **启用 ShardingSphere SQL 日志**: ```yaml spring: shardingsphere: props: sql-show: true # 打印实际路由的SQL ``` 通过以上步骤,可解决因动态数据源初始化失败导致的级联依赖注入错误。核心要点在于 **确保分表配置生效** 和 **消除 MyBatis 组件冲突**。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值