Tag: 弹簧

Spring Boot和多个外部configuration文件

我有多个属性文件,我想从类path加载。 在/src/main/resources下有一个默认设置,它是myapp.jar一部分。 我的springcontext期望文件在类path。 即 <util:properties id="Job1Props" location="classpath:job1.properties"></util:properties> <util:properties id="Job2Props" location="classpath:job2.properties"></util:properties> 我也需要用外部设置覆盖这些属性的选项。 我在cwd有一个外部configuration文件夹。 按照Spring引导文档config文件夹应该在classpath上。 但是从doc不清楚它是否只会覆盖来自那里的applicaiton.properties或者config中的所有属性。 当我testing它时,只有application.properties被拾取,剩下的属性仍然从/src/main/resources被拾取。 我已经尝试提供他们作为逗号分隔列表spring.config.location但默认设置仍然没有被覆盖。 我如何使多个外部configuration文件覆盖默认的? 作为解决方法我目前使用app.config.location (特定于应用程序的属性),我通过命令行提供。 即 java -jar myapp.jar app.config.location=file:./config 我改变了我的applicationcontext上下文 <util:properties id="Job2Props" location="{app.config.location}/job2.properties"></util:properties> 这就是我加载应用程序时如何分离文件和类path。 EDITS: //psuedo code if (StringUtils.isBlank(app.config.location)) { System.setProperty(APP_CONFIG_LOCATION, "classpath:"); } 我真的不想使用上面的解决方法,并popup覆盖类path上的所有外部configuration文件,就像它为application.properties文件。

确保Spring Quartz作业执行不重叠

我有一个Java程序,每20秒执行一次Spring Qquartz。 有时只需要几秒钟的时间来执行,但随着数据变得更大,我相信它会运行20秒或更长时间。 在一个实例仍在执行的情况下,如何防止Quartz触发/触发作业? 在数据库上执行相同操作的2个作业不会那么好。 有什么办法可以做一些同步吗?

SpringMVC可以configuration为处理所有请求,但排除静态内容目录吗?

如果我映射我的Spring应用程序来处理所有传入的请求('/ *'),那么对静态内容的请求将返回404。 例如,对“myhost.com/css/global.css”的请求将返回一个404,即使Spring在截获请求时存在该资源。 另一种方法是将SpringMVC映射到子目录(例如'/ home / '),但在这种情况下,您必须在应用程序内的所有链接中传递此目录。 有没有办法将SpringMVC映射到“/ ”并从处理中排除一组目录? 我目前的web.xmlconfiguration是: <servlet> <servlet-name>springApp</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <load-on-startup>2</load-on-startup> </servlet> <servlet-mapping> <servlet-name>springApp</servlet-name> <url-pattern>/home/*</url-pattern> </servlet-mapping> 理想情况下,我想要映射如下所示: <servlet-mapping> <servlet-name>springApp</servlet-name> <url-pattern>/*</url-pattern> <exclude>/css/*,/js/*</exclude> </servlet-mapping> 这种事情可能吗?

使用Angular2将file upload到Rest API

实际上,我正在使用angular度为2的接口编写Spring API REST。 我的问题是我无法上传angular度为2的文件。 我在Java中的Webresources是: @RequestMapping(method = RequestMethod.POST, value = "/upload") public String handleFileUpload(@RequestParam MultipartFile file) { //Dosomething } 当我通过URL请求与Auth头等呼叫它时,它是完全正常工作…(与先进的rest客户端扩展为Chrome) certificate:(在这种情况下一切正常) 我加了 <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver" /> Springconfiguration文件和POM依赖 <dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.2</version> </dependency> 但是当我尝试用webform做同样的事情时: <input type="file" #files (change)="change(files)"/> <pre>{{fileContents$|async}}</pre> 使用(更改)方法: change(file) { let formData = new FormData(); formData.append("file", file); console.log(formData); let headers = new Headers({ 'Authorization': […]

Spring MVCtypes转换:PropertyEditor或Converter?

我正在寻找在MVC中绑定和转换数据的最简单最简单的方法。 如果可能的话,不做任何XMLconfiguration。 到目前为止,我一直在使用PropertyEditor : public class CategoryEditor extends PropertyEditorSupport { // Converts a String to a Category (when submitting form) @Override public void setAsText(String text) { Category c = new Category(text); this.setValue(c); } // Converts a Category to a String (when displaying form) @Override public String getAsText() { Category c = (Category) this.getValue(); return c.getName(); […]

为什么DispatcherServlet创build另一个应用程序上下文?

我已经使用ContextLoaderListener和上下文init参数contextConfigLocationconfiguration了根应用程序上下文。 根上下文然后被JSF(* .jsf)variablesparsing器访问。 它工作正常。 现在的问题是,通过DispatcherServlet的请求(* .do)将获得另一个应用程序上下文,然后单例bean被实例化两次。 我不需要另一个DispatcherServlet应用程序上下文,我怎么能指定它重新使用由ContextLoaderListener加载的现有的根应用程序上下文? 注意 在阅读参考页面的答案后,我知道在根上下文和调度程序上下文之间存在上下文分离,但没有一个引用告诉我该去哪里。 所以这里是我的解决scheme,也许对面临类似问题的其他人有帮助: 在调度程序servlet: dispatcher-servlet.xml的上下文configurationXML中,我已经复制了已经在根上下文中定义的定义的<context:component-scan/> 。 所以删除它。 dispatcher-servlet.xml只需要定义那些用于Spring MVC的bean。 所有的控制器已经在根上下文中被扫描和实例化,但是,默认情况下,Spring MVC不会在请求映射的根上下文中注册控制器。 你可以: 2.1。 在根上下文中,仅从<component-scan>排除@Controller ,并仅在dispatcher-servlet.xml中扫描@Controller 。 2.2。 或者,将属性DefaultAnnotationHandlerMapping.detectHandlersInAncestorContexts设置为true: (dispatcher-servlet.xml:) <bean id="handlerMapping" class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping"> <property name="detectHandlersInAncestorContexts" value="true" /> </bean>

Spring MVC – 如何在Spring控制器中获取地图中的所有请求参数?

示例url: ../search/?attr1=value1&attr2=value2&attr4=value4 我不知道attr1,att2和attr4的名字。 我想能够做类似的事情(或类似的,不在乎,只要我有访问请求参数名称 – >值的地图: @RequestMapping(value = "/search/{parameters}", method = RequestMethod.GET) public void search(HttpServletRequest request, @PathVariable Map<Spring,Spring> allRequestParams, ModelMap model) throws Exception {//TODO: implement} 我如何用Spring MVC实现这一点?

在父上下文中声明Spring Bean与子上下文

我有一个spring bean(dao)对象,我通过下面的xml在我的ServletContext中实例化: <bean id="userDao" class="com.company.dao.impl.UserDaoImpl"> <property name="sessionFactory" ref="sessionFactory" /> </bean> 这个bean是在我的webapp-servlet.xml文件中声明的,并被我的应用程序在ServletContext中使用。 我也使用SpringSecurity。 这是我的理解,它运行在不同的上下文(SecurityContext)。 我的应用程序有一个webapp-security.xml,我实例化一个自定义身份validation提供程序。 我想使用我的应用程序中使用我的dao也做我的安全上下文中的用户查找,但是当我运行: <bean id="userAuthenticationProvider" class="com.company.security.UserAuthenticationProvider"> <property name="userDao" ref="userDao" /> </bean> 我得到的错误说,没有这样的bean“userDao”。 这个bean在我的其他上下文中声明的bean中自动assembly,但不在我的安全上下文中。 根据Spring文档,我相信web.xml中需要两个独立的上下文 <listener> <listener-class>org.springframework.web.context.ContextLoaderListener </listener-class> </listener> <listener> <listener-class> org.springframework.security.web.session.HttpSessionEventPublisher </listener-class> </listener> 所以我的问题是,我怎样才能访问我的我的SecurityContext中的我的ServletContext居住的DAO? 有我的道的范围修饰符,或者我可以以某种方式在我的身份validation提供程序在运行时获取ServletContext? 作为参考,这是我想如何在我的身份validation提供程序中使用它: public class UserAuthenticationProvider extends AbstractUserDetailsAuthenticationProvider { @Override protected UserDetails retrieveUser(String userName, UsernamePasswordAuthenticationToken authenticationToken) throws AuthenticationException { // […]

Spring XML文件configuration层次结构的帮助/解释

当我第一次开始学习Spring时,事情是在applicationContext.xml文件中configuration的。 然后,当我开始阅读专门针对更新版本的Spring的书籍时,他们都已经在独立的XML文件(如myapp-servlet-xml,myapp-security.xml,myapp-service.xml等)中完成了configuration,在web.xml文件中configuration一个contextConfigLocation。 所以,例如,我一直遵循的代码有这个,因为它的contextConfigLocation: <context-param> <param-name>contextConfigLocation</param-name> <param-value> /WEB-INF/myapp-servlet.xml /WEB-INF/myapp-data.xml </param-value> </context-param> 无论如何,最近我遇到了一个configuration问题(StackOverflow的帮助人员帮我弄清楚了),这是由于这种分离。 没有applicationContext.xml文件的这些书籍的例子,后来我尝试添加自动扫描和注释到应用程序,这引起了问题。 我试着把所有东西都移到applicationContext.xml中,并且废除了其他文件,解决了这个问题。 没有别的改变,我只是把一切都放在applicationContext.xml中。 所以,这个以及其他人的评论让我明白,即使你没有创build一个applicationContext.xml,它仍然被使用,它是某种configuration层次结构的顶层。 我希望别人能向我解释这一切是如何运作的,因为我没有在任何地方find任何解释。 例如,如果我将某些上下文:component-scan标记放入applicationContext.xml下的configuration文件中,可能会导致某些类无法扫描。 那种性质的东西。 我不明白优先顺序,以及在哪里可以确定应用程序广泛等等。 如果有人能够清楚地解释它或者指出一个解释它的资源,我将不胜感激,谢谢。 希望我所问的是有道理的。

获得Spring应用程序上下文

有没有办法在Spring应用程序中静态/全局地请求一个ApplicationContext的副本? 假设主类启动并初始化应用程序上下文,它是否需要通过调用堆栈传递给需要它的任何类,或者是否有类请求以前创build的上下文? (我认为这是一个单身?)