SpringBoot打包将jar包与lib依赖、配置文件分开-问题1 :Spring多环境配置

在启动SpringBoot应用时遇到错误,由于YAML配置文件中使用了非法字符 '@' 开始标记,导致配置加载失败。具体错误为ScannerException,提示在第19行发现'@'不能作为任何标记的开始。解决方案是在Maven资源配置中启用filtering,以在复制资源文件时替换属性值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

SpringBoot打包将jar包与lib依赖、配置文件分开-问题1 :Spring多环境配置

### spring配置
spring:
  ## 多环境配置
  profiles:
    active: @profile.name@                    #多环境配置,默认为dev开发环境

DeBug:在 YAML 中,@ 不是用来开始标记的有效字符。如下

DEBUG org.springframework.boot.context.logging.ClasspathLoggingApplicationListener - Application failed to start with classpath: [file:/D:/WG/gDesign/digital-core-master/admin/timo/config/]
19:40:52.014 [background-preinit] DEBUG org.hibernate.validator.messageinterpolation.ResourceBundleMessageInterpolator - Loaded expression factory via original TCCL
19:40:52.016 [background-preinit] DEBUG org.hibernate.validator.internal.engine.ValidatorFactoryImpl - HV000234: Using org.hibernate.validator.messageinterpolation.ResourceBundleMessageInterpolator as ValidatorFactory-scoped message interpolator.
19:40:52.017 [background-preinit] DEBUG org.hibernate.validator.internal.engine.ValidatorFactoryImpl - HV000234: Using org.hibernate.validator.internal.engine.resolver.JPATraversableResolver as ValidatorFactory-scoped traversable resolver.
19:40:52.017 [background-preinit] DEBUG org.hibernate.validator.internal.engine.ValidatorFactoryImpl - HV000234: Using org.hibernate.validator.internal.util.ExecutableParameterNameProvider as ValidatorFactory-scoped parameter name provider.
19:40:52.017 [background-preinit] DEBUG org.hibernate.validator.internal.engine.ValidatorFactoryImpl - HV000234: Using org.hibernate.validator.internal.engine.DefaultClockProvider as ValidatorFactory-scoped clock provider.
19:40:52.017 [background-preinit] DEBUG org.hibernate.validator.internal.engine.ValidatorFactoryImpl - HV000234: Using org.hibernate.validator.internal.engine.scripting.DefaultScriptEvaluatorFactory as ValidatorFactory-scoped script evaluator factory.
19:40:52.172 [restartedMain] ERROR org.springframework.boot.SpringApplication - Application run failed
java.lang.IllegalStateException: Failed to load property source from location ‘classpath:/application.yml’
at org.springframework.boot.context.config.ConfigFileApplicationListener L o a d e r . l o a d ( C o n f i g F i l e A p p l i c a t i o n L i s t e n e r . j a v a : 556 ) a t o r g . s p r i n g f r a m e w o r k . b o o t . c o n t e x t . c o n f i g . C o n f i g F i l e A p p l i c a t i o n L i s t e n e r Loader.load(ConfigFileApplicationListener.java:556) at org.springframework.boot.context.config.ConfigFileApplicationListener Loader.load(ConfigFileApplicationListener.java:556)atorg.springframework.boot.context.config.ConfigFileApplicationListenerLoader.loadForFileExtension(ConfigFileApplicationListener.java:502)
at org.springframework.boot.context.config.ConfigFileApplicationListener L o a d e r . l o a d ( C o n f i g F i l e A p p l i c a t i o n L i s t e n e r . j a v a : 469 ) a t o r g . s p r i n g f r a m e w o r k . b o o t . c o n t e x t . c o n f i g . C o n f i g F i l e A p p l i c a t i o n L i s t e n e r Loader.load(ConfigFileApplicationListener.java:469) at org.springframework.boot.context.config.ConfigFileApplicationListener Loader.load(ConfigFileApplicationListener.java:469)atorg.springframework.boot.context.config.ConfigFileApplicationListenerLoader.lambda$null 6 ( C o n f i g F i l e A p p l i c a t i o n L i s t e n e r . j a v a : 450 ) a t j a v a . l a n g . I t e r a b l e . f o r E a c h ( U n k n o w n S o u r c e ) a t o r g . s p r i n g f r a m e w o r k . b o o t . c o n t e x t . c o n f i g . C o n f i g F i l e A p p l i c a t i o n L i s t e n e r 6(ConfigFileApplicationListener.java:450) at java.lang.Iterable.forEach(Unknown Source) at org.springframework.boot.context.config.ConfigFileApplicationListener 6(ConfigFileApplicationListener.java:450)atjava.lang.Iterable.forEach(UnknownSource)atorg.springframework.boot.context.config.ConfigFileApplicationListenerLoader.lambda$load 7 ( C o n f i g F i l e A p p l i c a t i o n L i s t e n e r . j a v a : 449 ) a t j a v a . l a n g . I t e r a b l e . f o r E a c h ( U n k n o w n S o u r c e ) a t o r g . s p r i n g f r a m e w o r k . b o o t . c o n t e x t . c o n f i g . C o n f i g F i l e A p p l i c a t i o n L i s t e n e r 7(ConfigFileApplicationListener.java:449) at java.lang.Iterable.forEach(Unknown Source) at org.springframework.boot.context.config.ConfigFileApplicationListener 7(ConfigFileApplicationListener.java:449)atjava.lang.Iterable.forEach(UnknownSource)atorg.springframework.boot.context.config.ConfigFileApplicationListenerLoader.load(ConfigFileApplicationListener.java:446)
at org.springframework.boot.context.config.ConfigFileApplicationListener L o a d e r . l o a d ( C o n f i g F i l e A p p l i c a t i o n L i s t e n e r . j a v a : 334 ) a t o r g . s p r i n g f r a m e w o r k . b o o t . c o n t e x t . c o n f i g . C o n f i g F i l e A p p l i c a t i o n L i s t e n e r . a d d P r o p e r t y S o u r c e s ( C o n f i g F i l e A p p l i c a t i o n L i s t e n e r . j a v a : 209 ) a t o r g . s p r i n g f r a m e w o r k . b o o t . c o n t e x t . c o n f i g . C o n f i g F i l e A p p l i c a t i o n L i s t e n e r . p o s t P r o c e s s E n v i r o n m e n t ( C o n f i g F i l e A p p l i c a t i o n L i s t e n e r . j a v a : 192 ) a t o r g . s p r i n g f r a m e w o r k . b o o t . c o n t e x t . c o n f i g . C o n f i g F i l e A p p l i c a t i o n L i s t e n e r . o n A p p l i c a t i o n E n v i r o n m e n t P r e p a r e d E v e n t ( C o n f i g F i l e A p p l i c a t i o n L i s t e n e r . j a v a : 179 ) a t o r g . s p r i n g f r a m e w o r k . b o o t . c o n t e x t . c o n f i g . C o n f i g F i l e A p p l i c a t i o n L i s t e n e r . o n A p p l i c a t i o n E v e n t ( C o n f i g F i l e A p p l i c a t i o n L i s t e n e r . j a v a : 165 ) a t o r g . s p r i n g f r a m e w o r k . c o n t e x t . e v e n t . S i m p l e A p p l i c a t i o n E v e n t M u l t i c a s t e r . d o I n v o k e L i s t e n e r ( S i m p l e A p p l i c a t i o n E v e n t M u l t i c a s t e r . j a v a : 172 ) a t o r g . s p r i n g f r a m e w o r k . c o n t e x t . e v e n t . S i m p l e A p p l i c a t i o n E v e n t M u l t i c a s t e r . i n v o k e L i s t e n e r ( S i m p l e A p p l i c a t i o n E v e n t M u l t i c a s t e r . j a v a : 165 ) a t o r g . s p r i n g f r a m e w o r k . c o n t e x t . e v e n t . S i m p l e A p p l i c a t i o n E v e n t M u l t i c a s t e r . m u l t i c a s t E v e n t ( S i m p l e A p p l i c a t i o n E v e n t M u l t i c a s t e r . j a v a : 139 ) a t o r g . s p r i n g f r a m e w o r k . c o n t e x t . e v e n t . S i m p l e A p p l i c a t i o n E v e n t M u l t i c a s t e r . m u l t i c a s t E v e n t ( S i m p l e A p p l i c a t i o n E v e n t M u l t i c a s t e r . j a v a : 127 ) a t o r g . s p r i n g f r a m e w o r k . b o o t . c o n t e x t . e v e n t . E v e n t P u b l i s h i n g R u n L i s t e n e r . e n v i r o n m e n t P r e p a r e d ( E v e n t P u b l i s h i n g R u n L i s t e n e r . j a v a : 75 ) a t o r g . s p r i n g f r a m e w o r k . b o o t . S p r i n g A p p l i c a t i o n R u n L i s t e n e r s . e n v i r o n m e n t P r e p a r e d ( S p r i n g A p p l i c a t i o n R u n L i s t e n e r s . j a v a : 54 ) a t o r g . s p r i n g f r a m e w o r k . b o o t . S p r i n g A p p l i c a t i o n . p r e p a r e E n v i r o n m e n t ( S p r i n g A p p l i c a t i o n . j a v a : 347 ) a t o r g . s p r i n g f r a m e w o r k . b o o t . S p r i n g A p p l i c a t i o n . r u n ( S p r i n g A p p l i c a t i o n . j a v a : 306 ) a t o r g . s p r i n g f r a m e w o r k . b o o t . S p r i n g A p p l i c a t i o n . r u n ( S p r i n g A p p l i c a t i o n . j a v a : 1260 ) a t o r g . s p r i n g f r a m e w o r k . b o o t . S p r i n g A p p l i c a t i o n . r u n ( S p r i n g A p p l i c a t i o n . j a v a : 1248 ) a t c o m . l i n l n . a d m i n . B o o t A p p l i c a t i o n . m a i n ( B o o t A p p l i c a t i o n . j a v a : 20 ) a t s u n . r e f l e c t . N a t i v e M e t h o d A c c e s s o r I m p l . i n v o k e 0 ( N a t i v e M e t h o d ) a t s u n . r e f l e c t . N a t i v e M e t h o d A c c e s s o r I m p l . i n v o k e ( U n k n o w n S o u r c e ) a t s u n . r e f l e c t . D e l e g a t i n g M e t h o d A c c e s s o r I m p l . i n v o k e ( U n k n o w n S o u r c e ) a t j a v a . l a n g . r e f l e c t . M e t h o d . i n v o k e ( U n k n o w n S o u r c e ) a t o r g . s p r i n g f r a m e w o r k . b o o t . d e v t o o l s . r e s t a r t . R e s t a r t L a u n c h e r . r u n ( R e s t a r t L a u n c h e r . j a v a : 49 ) C a u s e d b y : o r g . y a m l . s n a k e y a m l . s c a n n e r . S c a n n e r E x c e p t i o n : w h i l e s c a n n i n g f o r t h e n e x t t o k e n f o u n d c h a r a c t e r ′ @ ′ t h a t c a n n o t s t a r t a n y t o k e n . ( D o n o t u s e @ f o r i n d e n t a t i o n ) i n ′ r e a d e r ′ , l i n e 19 , c o l u m n 13 : a c t i v e : @ p r o f i l e . n a m e @ a t o r g . y a m l . s n a k e y a m l . s c a n n e r . S c a n n e r I m p l . f e t c h M o r e T o k e n s ( S c a n n e r I m p l . j a v a : 419 ) a t o r g . y a m l . s n a k e y a m l . s c a n n e r . S c a n n e r I m p l . c h e c k T o k e n ( S c a n n e r I m p l . j a v a : 227 ) a t o r g . y a m l . s n a k e y a m l . p a r s e r . P a r s e r I m p l Loader.load(ConfigFileApplicationListener.java:334) at org.springframework.boot.context.config.ConfigFileApplicationListener.addPropertySources(ConfigFileApplicationListener.java:209) at org.springframework.boot.context.config.ConfigFileApplicationListener.postProcessEnvironment(ConfigFileApplicationListener.java:192) at org.springframework.boot.context.config.ConfigFileApplicationListener.onApplicationEnvironmentPreparedEvent(ConfigFileApplicationListener.java:179) at org.springframework.boot.context.config.ConfigFileApplicationListener.onApplicationEvent(ConfigFileApplicationListener.java:165) at org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:172) at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:165) at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:139) at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:127) at org.springframework.boot.context.event.EventPublishingRunListener.environmentPrepared(EventPublishingRunListener.java:75) at org.springframework.boot.SpringApplicationRunListeners.environmentPrepared(SpringApplicationRunListeners.java:54) at org.springframework.boot.SpringApplication.prepareEnvironment(SpringApplication.java:347) at org.springframework.boot.SpringApplication.run(SpringApplication.java:306) at org.springframework.boot.SpringApplication.run(SpringApplication.java:1260) at org.springframework.boot.SpringApplication.run(SpringApplication.java:1248) at com.linln.admin.BootApplication.main(BootApplication.java:20) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:49) Caused by: org.yaml.snakeyaml.scanner.ScannerException: while scanning for the next token found character '@' that cannot start any token. (Do not use @ for indentation) in 'reader', line 19, column 13: active: @profile.name@ ^ at org.yaml.snakeyaml.scanner.ScannerImpl.fetchMoreTokens(ScannerImpl.java:419) at org.yaml.snakeyaml.scanner.ScannerImpl.checkToken(ScannerImpl.java:227) at org.yaml.snakeyaml.parser.ParserImpl Loader.load(ConfigFileApplicationListener.java:334)atorg.springframework.boot.context.config.ConfigFileApplicationListener.addPropertySources(ConfigFileApplicationListener.java:209)atorg.springframework.boot.context.config.ConfigFileApplicationListener.postProcessEnvironment(ConfigFileApplicationListener.java:192)atorg.springframework.boot.context.config.ConfigFileApplicationListener.onApplicationEnvironmentPreparedEvent(ConfigFileApplicationListener.java:179)atorg.springframework.boot.context.config.ConfigFileApplicationListener.onApplicationEvent(ConfigFileApplicationListener.java:165)atorg.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:172)atorg.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:165)atorg.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:139)atorg.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:127)atorg.springframework.boot.context.event.EventPublishingRunListener.environmentPrepared(EventPublishingRunListener.java:75)atorg.springframework.boot.SpringApplicationRunListeners.environmentPrepared(SpringApplicationRunListeners.java:54)atorg.springframework.boot.SpringApplication.prepareEnvironment(SpringApplication.java:347)atorg.springframework.boot.SpringApplication.run(SpringApplication.java:306)atorg.springframework.boot.SpringApplication.run(SpringApplication.java:1260)atorg.springframework.boot.SpringApplication.run(SpringApplication.java:1248)atcom.linln.admin.BootApplication.main(BootApplication.java:20)atsun.reflect.NativeMethodAccessorImpl.invoke0(NativeMethod)atsun.reflect.NativeMethodAccessorImpl.invoke(UnknownSource)atsun.reflect.DelegatingMethodAccessorImpl.invoke(UnknownSource)atjava.lang.reflect.Method.invoke(UnknownSource)atorg.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:49)Causedby:org.yaml.snakeyaml.scanner.ScannerException:whilescanningforthenexttokenfoundcharacter@thatcannotstartanytoken.(Donotuse@forindentation)inreader,line19,column13:active:@profile.name@atorg.yaml.snakeyaml.scanner.ScannerImpl.fetchMoreTokens(ScannerImpl.java:419)atorg.yaml.snakeyaml.scanner.ScannerImpl.checkToken(ScannerImpl.java:227)atorg.yaml.snakeyaml.parser.ParserImplParseBlockMappingValue.produce(ParserImpl.java:586)
at org.yaml.snakeyaml.parser.ParserImpl.peekEvent(ParserImpl.java:158)
at org.yaml.snakeyaml.parser.ParserImpl.checkEvent(ParserImpl.java:148)
at org.yaml.snakeyaml.composer.Composer.composeNode(Composer.java:124)
at org.yaml.snakeyaml.composer.Composer.composeValueNode(Composer.java:236)
at org.yaml.snakeyaml.composer.Composer.composeMappingChildren(Composer.java:227)
at org.yaml.snakeyaml.composer.Composer.composeMappingNode(Composer.java:215)
at org.yaml.snakeyaml.composer.Composer.composeNode(Composer.java:144)
at org.yaml.snakeyaml.composer.Composer.composeValueNode(Composer.java:236)
at org.yaml.snakeyaml.composer.Composer.composeMappingChildren(Composer.java:227)
at org.yaml.snakeyaml.composer.Composer.composeMappingNode(Composer.java:215)
at org.yaml.snakeyaml.composer.Composer.composeNode(Composer.java:144)
at org.yaml.snakeyaml.composer.Composer.composeValueNode(Composer.java:236)
at org.yaml.snakeyaml.composer.Composer.composeMappingChildren(Composer.java:227)
at org.yaml.snakeyaml.composer.Composer.composeMappingNode(Composer.java:215)
at org.yaml.snakeyaml.composer.Composer.composeNode(Composer.java:144)
at org.yaml.snakeyaml.composer.Composer.getNode(Composer.java:85)
at org.yaml.snakeyaml.constructor.BaseConstructor.getData(BaseConstructor.java:123)
at org.yaml.snakeyaml.Yaml 1. n e x t ( Y a m l . j a v a : 547 ) a t o r g . s p r i n g f r a m e w o r k . b e a n s . f a c t o r y . c o n f i g . Y a m l P r o c e s s o r . p r o c e s s ( Y a m l P r o c e s s o r . j a v a : 160 ) a t o r g . s p r i n g f r a m e w o r k . b e a n s . f a c t o r y . c o n f i g . Y a m l P r o c e s s o r . p r o c e s s ( Y a m l P r o c e s s o r . j a v a : 134 ) a t o r g . s p r i n g f r a m e w o r k . b o o t . e n v . O r i g i n T r a c k e d Y a m l L o a d e r . l o a d ( O r i g i n T r a c k e d Y a m l L o a d e r . j a v a : 75 ) a t o r g . s p r i n g f r a m e w o r k . b o o t . e n v . Y a m l P r o p e r t y S o u r c e L o a d e r . l o a d ( Y a m l P r o p e r t y S o u r c e L o a d e r . j a v a : 50 ) a t o r g . s p r i n g f r a m e w o r k . b o o t . c o n t e x t . c o n f i g . C o n f i g F i l e A p p l i c a t i o n L i s t e n e r 1.next(Yaml.java:547) at org.springframework.beans.factory.config.YamlProcessor.process(YamlProcessor.java:160) at org.springframework.beans.factory.config.YamlProcessor.process(YamlProcessor.java:134) at org.springframework.boot.env.OriginTrackedYamlLoader.load(OriginTrackedYamlLoader.java:75) at org.springframework.boot.env.YamlPropertySourceLoader.load(YamlPropertySourceLoader.java:50) at org.springframework.boot.context.config.ConfigFileApplicationListener 1.next(Yaml.java:547)atorg.springframework.beans.factory.config.YamlProcessor.process(YamlProcessor.java:160)atorg.springframework.beans.factory.config.YamlProcessor.process(YamlProcessor.java:134)atorg.springframework.boot.env.OriginTrackedYamlLoader.load(OriginTrackedYamlLoader.java:75)atorg.springframework.boot.env.YamlPropertySourceLoader.load(YamlPropertySourceLoader.java:50)atorg.springframework.boot.context.config.ConfigFileApplicationListenerLoader.loadDocuments(ConfigFileApplicationListener.java:574)
at org.springframework.boot.context.config.ConfigFileApplicationListener$Loader.load(ConfigFileApplicationListener.java:528)
… 28 common frames omitted

解决方法:filtering设置为 true,以便 Maven 在拷贝资源文件时替换其中的属性值

<resources>
    <resource>
        <directory>src/main/resources</directory>
        <includes>
            <!--将如下格式配置文件拷贝-->
            <exclude>*.properties</exclude>
            <exclude>*.yml</exclude>
            <exclude>*.xml</exclude>
            <exclude>*.txt</exclude>
        </includes>
        <filtering>true</filtering><!-- 设置为 true,以便 Maven 在拷贝资源文件时替换其中的属性值 -->
    </resource>
</resources>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值