基於Python的交互式訪問

應用遷移中遇到一些有特殊要求的應用,好比須要經過交互生成一些新的config文件,而後啓動應用須要依賴於這些文件,這樣在構建鏡像的時候基本上是沒有辦法把這些文件固定的,由於他須要根據運行環境去進行動態註冊生成,目前的解決方法以下:java

1.寫一段支持交互的python腳本,生成配置python

#!/usr/bin/python

import subprocess
import time
import fcntl
import os

p = subprocess.Popen(["java","-jar","a.jar"],stdin=subprocess.PIPE,stdout=subprocess.PIPE)

flags = fcntl.fcntl(p.stdout,fcntl.F_GETFL)
fcntl.fcntl(p.stdout,fcntl.F_SETZFL,flags| os.O_NONBLOCK)

time.sleep(2)
print p.stdout.read()
p.stdin.write("1\r\n")

開始調試時屏幕一直處於blocking狀態,後來同事高手指導下加入NONBLOCK後才經過。web

2.將python腳本放入tomcat運行的catalina.sh,讓他在啓動容器後,啓動腳本一開始就運行spring

 

================================================apache

另外在應用遷移的時候遇到的另外一個問題tomcat

代碼相似cookie

Cookie cookie = new Cookie("testCookie", "test");
        cookie.setDomain(".test.com");
        cookie.setPath("/");
        cookie.setMaxAge(36000);
        resp.addCookie(cookie);

 

在tomcat 8.5的環境下報錯mvc

java.lang.IllegalArgumentException: An invalid domain [.test.com] was specified for this cookie
        at org.apache.tomcat.util.http.Rfc6265CookieProcessor.validateDomain(Rfc6265CookieProcessor.java:181)
        at org.apache.tomcat.util.http.Rfc6265CookieProcessor.generateHeader(Rfc6265CookieProcessor.java:123)
        at org.apache.catalina.connector.Response.generateCookieString(Response.java:989)
        at org.apache.catalina.connector.Response.addCookie(Response.java:937)
        at org.apache.catalina.connector.ResponseFacade.addCookie(ResponseFacade.java:386)
        at com.cml.mvc.controller.HelloWorld.str(HelloWorld.java:98)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:497)
        at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:221)
        at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:137)
        at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:110)
        at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleMethod(RequestMappingHandlerAdapter.java:777)
        at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:706)
        at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85

 

緣由是  在tomcat8.5上是使用org.apache.tomcat.util.http.Rfc6265CookieProcessorapp

在tomcat8.0上使用的是org.apache.tomcat.util.http.LegacyCookieProcessordom

解決辦法是去掉域名前面的.

Cookie cookie = new Cookie("testCookie", "test");
        cookie.setDomain("test.com");
        cookie.setPath("/");
        cookie.setMaxAge(36000);
        resp.addCookie(cookie);
相關文章
相關標籤/搜索