[Примечание: Это относится к iPhone SDK, не SDK Mac OS]
Из того, что я могу сказать, эти функции не присутствуют в SDK (unistd.h
, файл решительно срезан когда по сравнению со стандартным Mac OS X 10,5 файлов). Я использовал бы что-то вроде:
[NSTemporaryDirectory() stringByAppendingPathComponent: [NSString stringWithFormat: @"%.0f.%@", [NSDate timeIntervalSinceReferenceDate] * 1000.0, @"txt"]];
Не самое симпатичное, но функциональный
Для конкретного случая строки подключения JDBC я бы рекомендовал вместо этого использовать пул подключений, управляемый Tomcat. Вы можете узнать больше об этом здесь: http://tomcat.apache.org/tomcat-5.5-doc/jndi-datasource-examples-howto.html
Это больше работы, но я думаю, что в долгосрочной перспективе это послужит вам лучше.
Для конфигурации веб-приложения вы можете разместить конфигурацию в пути к классам. Затем вы можете перейти к нему из своего приложения с помощью getResourceAsStream или, если вы предпочитаете Spring:
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>classpath:my-config.properties</value>
</list>
</property>
</bean>
Есть ряд мест, где вы можете поместить свойства в путь к классам в Tomcat. в порядке просмотра:
/WEB-INF/classes of your web application
/WEB-INF/lib/*. jar of your web application
$CATALINA_HOME/common/classes
$CATALINA_HOME/common/endorsed/*.jar
$CATALINA_HOME/common/i18n/*.jar
$CATALINA_HOME/common/lib / *. jar
$CATALINA_BASE/shared/classes
$CATALINA_BASE/shared/lib/*.jar
Например, если вы поместите my-config.properties как в файл .jar, так и в WEB-INF / classes, будет использоваться файл из WEB-INF / classes. Вы можете использовать этот механизм по умолчанию для тестирования конфигурации и переопределения конфигурации prod на серверах prod.
Hmm. It looks like the easiest path to getting what I want on the Java side of the application is to use Servlet.getServletConfig().
getInitParameter(parameterName)
e.g. getInitParameter("myApp.connectionString");
But I don't know where to set this. The Tomcat docs talk about various permutations of context.xml but I want to make sure this parameter only affects my servlet and not any others. I also don't want to locate it within my .war file so that I can keep this parameter independent of the applications (for instance if I install an upgrade).
Update: I figured it out, key/value parameters accessible by ServletContext.getInitParameter() go here (or can go here) in ${CATALINA_HOME}/conf/server.xml:
<Server port=... >
...
<Service name="Catalina" ...>
<Engine name="Catalina" ...>
...
<Host name="localhost" ...>
<Context path="/myWarFile">
<Parameter name="foo" value="123" />
<Parameter name="bar" value="456" />
...
</Context>
</Host>
</Engine>
</Service>
</Server>
This sets two parameters, "foo" = "123", "bar" = "456" for the servlet myWarFile.war (or more accurately with the URL path /myWarFile
) and I can get at them in Java with Servlet.getServletConfig().getInitParameter("foo")
or Servlet.getServletConfig().getInitParameter("bar")
.
I also looked at JIRA's server.xml entry (and what they tell you to set it to for MySQL), they use a Resource
rather than a Parameter
, not quite sure of the subtleties of this but it seems like it could be more appropriate method.
<Server port=... >
<Service name="Catalina" ...>
<Engine name="Catalina" ...>
<Host name="localhost" ...>
<Context path="/jira" docBase="${catalina.home}/atlassian-jira"
reloadable="false">
<Resource name="jdbc/JiraDS" auth="Container" type="javax.sql.DataSource"
username="jirauser"
password="..."
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost/jiradb1?autoReconnect=true&useUnicode=true&characterEncoding=UTF8"
maxActive="20"
validationQuery="select 1"
/>
</Context>
</Host>
</Engine>
</Service>
</Server>
вы можете добавьте путь к файлам свойств в вашем CATALINA_HOME / conf / catalina.properties
в "общем" загрузчике классов common.loader .