【修复】修复在某些机器上无法找到"Asia/Shanghai",导致启动失败的问题。新增失败后尝试"China Standard Time"

【修复】修复Luban.ClientServer未初始化DefaultTimeZone,导致默认时区为Utc的bug,严重!
main
walon 2021-11-30 20:14:57 +08:00
parent 7df2f6ea86
commit 46ccf6868b
4 changed files with 103 additions and 3 deletions

View File

@ -325,6 +325,44 @@ xml中定义如下
</table>
或者可以用多级标题头对每个元素单独限定
<table border="1">
<tr align="center">
<td>##</td>
<td>id</td>
<td>name</td>
<td colspan="9">rewards</td>
</tr>
<tr align="center">
<td>##type</td>
<td>int</td>
<td>string</td>
<td colspan="9">list,Reward</td>
</tr>
<tr align="center">
<td>##+</td>
<td></td>
<td></td>
<td colspan="3">0</td>
<td colspan="3">1</td>
<td colspan="3">2</td>
</tr>
<tr align="center">
<td>##+</td>
<td/>
<td/>
<td>item_id</td><td>num</td><td>desc</td>
<td>item_id</td><td>num</td><td>desc</td>
<td>item_id</td><td>num</td><td>desc</td>
</tr>
<tr align="center"><td/><td>1</td><td>task1</td><td>1</td><td>10</td><td>desc1</td><td>2</td><td>12</td><td>desc2</td><td>3</td><td>13</td><td>desc3</td></tr>
<tr align="center"><td/><td>2</td><td>task1</td><td>3</td><td>30</td><td>desc3</td><td>4</td><td>40</td><td>desc4</td></tr>
<tr align="center"><td/><td>3</td><td>task1</td><td>5</td><td>50</td><td>desc5</td></tr>
</table>
### 多行结构列表
有时候列表结构的每个结构字段较多,如果水平展开则占据太多列,不方便编辑,如果拆表,无论程序还是策划都不方便,此时可以使用多行模式。支持任意层次的多行结构列表(也即多行结构中的每个元素也可以是多行), name&multi_rows=1或者 *name 都可以表达一个多行解析的字段。
@ -579,6 +617,27 @@ xml中定义如下
</table>
<tr align="center">
<td>##+</td>
<td></td>
<td></td>
<td colspan="3">0</td>
<td colspan="3">1</td>
<td colspan="3">2</td>
</tr>
<tr align="center">
<td>##+</td>
<td/>
<td/>
<td>item_id</td><td>num</td><td>desc</td>
<td>item_id</td><td>num</td><td>desc</td>
<td>item_id</td><td>num</td><td>desc</td>
</tr>
<tr align="center"><td/><td>1</td><td>task1</td><td>1</td><td>10</td><td>desc1</td><td>2</td><td>12</td><td>desc2</td><td>3</td><td>13</td><td>desc3</td></tr>
<tr align="center"><td/><td>2</td><td>task1</td><td>3</td><td>30</td><td>desc3</td><td>4</td><td>40</td><td>desc4</td></tr>
<tr align="center"><td/><td>3</td><td>task1</td><td>5</td><td>50</td><td>desc5</td></tr>
</table>
### 可空数据类型
配置数据中经常有空值的语义需求实际项目中往往混杂地使用0或-1表达空值既不自然清晰也不统一。luban借鉴了c#中的可空变量的概念特地提供可空数据支持。所有原生数据类型以及enum、bean、和多态bean类型都有相应的可空数据类型。定义方式为 <类型名>?与c#里的Nullable类型定义方式相同。例如 bool?,int?,long?,double?, EColor?, DemoType?

View File

@ -219,6 +219,8 @@ Options:
LogUtil.InitSimpleNLogConfigure(NLog.LogLevel.FromString(options.LogLevel));
s_logger = NLog.LogManager.GetCurrentClassLogger();
TimeZoneUtil.InitDefaultTimeZone("");
int processorCount = System.Environment.ProcessorCount;
ThreadPool.SetMinThreads(Math.Max(4, processorCount), 5);
ThreadPool.SetMaxThreads(Math.Max(16, processorCount * 4), 10);

View File

@ -8,6 +8,45 @@ namespace Luban.Common.Utils
{
public static class TimeZoneUtil
{
private static readonly NLog.Logger s_logger = NLog.LogManager.GetCurrentClassLogger();
public static void InitDefaultTimeZone(string timeZoneName)
{
if (timeZoneName?.ToLower() == "local")
{
DefaultTimeZone = TimeZoneInfo.Local;
return;
}
if (timeZoneName?.ToLower() == "utc")
{
DefaultTimeZone = TimeZoneInfo.Utc;
return;
}
if (string.IsNullOrEmpty(timeZoneName))
{
try
{
DefaultTimeZone = TimeZoneInfo.FindSystemTimeZoneById("Asia/Shanghai");
}
catch (Exception)
{
try
{
DefaultTimeZone = TimeZoneInfo.FindSystemTimeZoneById("China Standard Time");
}
catch (Exception ex)
{
s_logger.Error(ex);
throw new ArgumentException("The default timezone ID 'Asia/Shanghai' and 'China Standard Time' was not found on local computer. please set valid timezone manually.");
}
}
}
else
{
DefaultTimeZone = TimeZoneInfo.FindSystemTimeZoneById(timeZoneName);
}
}
public static TimeZoneInfo DefaultTimeZone { get; set; } = TimeZoneInfo.Utc;
}
}

View File

@ -26,8 +26,8 @@ namespace Luban.Server
[Option("disable_cache", Required = false, HelpText = "disable generation cache")]
public bool DisableCache { get; set; }
[Option("i10n:default_timezone", Required = false, HelpText = "default timezone")]
public string L10nDefaultTimeZone { get; set; } = "Asia/Shanghai";
[Option("i10n:default_timezone", Required = false, HelpText = "default timezone id. 'Asia/Shanghai', 'China Standard Time' eg. you can also use two special values: local,utc")]
public string L10nDefaultTimeZone { get; set; }
}
static void Main(string[] args)
@ -50,7 +50,7 @@ namespace Luban.Server
System.Text.Encoding.RegisterProvider(System.Text.CodePagesEncodingProvider.Instance);
TimeZoneUtil.DefaultTimeZone = TimeZoneInfo.FindSystemTimeZoneById(options.L10nDefaultTimeZone);
TimeZoneUtil.InitDefaultTimeZone(options.L10nDefaultTimeZone);
GenServer.Ins.Start(false, options.Port, ProtocolStub.Factories);