我正在使用 Firebase Cloud Messaging 实现推送通知,为此我在我的 AndroidManifest.xml 文件中添加了此代码
<!--FCM RECEIVER-->
<receiver
android:name="com.google.firebase.iid.FirebaseInstanceIdInternalReceiver"
android:exported="false"/>
<receiver
android:name="com.google.firebase.iid.FirebaseInstanceIdReceiver"
android:exported="true"
android:permission="com.google.android.c2dm.permission.SEND">
<intent-filter>
<action android:name="com.google.android.c2dm.intent.RECEIVE"/>
<action android:name="com.google.android.c2dm.intent.REGISTRATION"/>
<category android:name="${applicationId}"/>
</intent-filter>
</receiver>
<!---FCM RECEIVER ENDS HERE-->
Run Code Online (Sandbox Code Playgroud)
但是当我尝试运行该应用程序时,它甚至在开始活动之前就抛出了该应用程序
Java.Lang.NoClassDefFoundError: 'Failed resolution of: Lcom/google/android/datatransport/runtime/dagger/internal/Factory;'
Run Code Online (Sandbox Code Playgroud)
顺便说一下,我为此功能安装了两个 NuGet 包:
我试过了:
c# java android-manifest xamarin.android firebase-cloud-messaging
在我的Azure函数中,我正在使用一个库,它通过ConfigurationManager中的ConnectionString建立与SQL服务器的连接,如下所示:
var cs = System.Configuration.ConfigurationManager.ConnectionStrings["DbConString"].ConnectionString;
DbConnection connection = new SqlConnection(cs);
Run Code Online (Sandbox Code Playgroud)
现在,当我通过应用程序设置在门户中设置连接字符串DbConString时,一切正常.但是对于本地开发,我使用azure-functions-cli,遗憾的是我不知道应该在哪里放置连接字符串以通过ConfigurationManager正确加载它.
我试图将它放在appsettings.json文件中,但没有成功.
编辑:我的appsettings.json目前看起来像这样:
{
"IsEncrypted": false,
"Values": {
"AzureWebJobsStorage": "",
"AzureWebJobsDashboard": "",
"MyServiceBusReader": "Endpoint=sb://xxxx=",
"DbConStr1": "data source=(localdb)\\MSSQLLocalDB;initial catalog=MyDb;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework",
"ConnectionStrings": {
"DbConStr2": "data source=(localdb)\\MS..."
}
}
}
Run Code Online (Sandbox Code Playgroud)
但是我无法通过ConfigurationManager访问"DbConStr1".像描述"的ConnectionStrings"中添加"DbConStr2" 这里会导致编译错误.也许是因为我没有使用.NET Core?
Edit2:我搞砸了"ConnectionStrings"的嵌套.它必须与"值"处于相同的嵌套级别:
{
"IsEncrypted": false,
"Values": {
"AzureWebJobsStorage": "",
"AzureWebJobsDashboard": "",
"MyServiceBusReader": "Endpoint=sb://xxxx="
},
"ConnectionStrings": {
"DbConStr": "data source=(localdb)\\MS..."
}
}
Run Code Online (Sandbox Code Playgroud) 授权策略不支持路径上的任何通配符模式吗?
\n我有以下端点:
\n/my-service/docs/active (GET)\n/my-service/docs/<id>/activate/<bool> (PUT)\nRun Code Online (Sandbox Code Playgroud)\n第一个将获取所有活动文档,第二个将激活/停用特定文档。\nI\xe2\x80\x99已尝试在授权策略上设置它,但由于 willdcard,它似乎忽略了此策略。
\n/my-service/docs/active (GET)\n/my-service/docs/<id>/activate/<bool> (PUT)\nRun Code Online (Sandbox Code Playgroud)\n除了更新我的所有端点之外,还有什么不同的解决方案吗?
\n10倍
\n我使用 logback 和 slf4j 来登录 Spring Boot 应用程序。我创建了一个自定义布局类,因为所有日志语句都将包装为 json。我已配置 logback-spring.xml 如下所示以采用自定义布局。有用!
问题是我无法应用该模式。只有布局(或)模式起作用。我想要的是始终记录在日志中,转到布局类,然后在记录之前应用模式。
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${user.home}/logs/sample.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${user.home}/logs/sample_%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>10MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<!-- how many days to keep the files -->
<maxHistory>30</maxHistory>
</rollingPolicy>
<encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
<layout class="com.test.test.payment.core.logging.SampleLogLayout" >
</layout>
</encoder>
*<!-- <encoder>
<charset>UTF-8</charset>
<Pattern>{"@timestamp": "%d{yyyy-MM-dd HH:mm:ss.SSS}", "priority": "%p", "application": "payment",
"class": "%C", "file": "%F:%L", "payload": %m }%n
</Pattern>
</encoder>-->*
</appender>
Run Code Online (Sandbox Code Playgroud)
这是SampleLogLayout课程:
public class SampleLogLayout extends LayoutBase<LoggingEvent> {
@Override
public String doLayout(LoggingEvent event) {
String renderedMessage = event.getMessage(); …Run Code Online (Sandbox Code Playgroud) 我在后端运行了三个服务,并且入口路由的定义如下:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: myapp-ingress
annotations:
kubernetes.io/ingress.class: nginx
certmanager.k8s.io/cluster-issuer: letsencrypt-prod
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
tls:
- hosts:
- myapp.westeurope.cloudapp.azure.com
secretName: acme-crt-secret
rules:
- host: myapp.westeurope.cloudapp.azure.com
http:
paths:
- path: /
backend:
serviceName: myapp-mvc
servicePort: 80
- path: /api
backend:
serviceName: myapp-api
servicePort: 80
- path: /identity
backend:
serviceName: myapp-identity
servicePort: 80
Run Code Online (Sandbox Code Playgroud)
问题是myapp-api已经在侦听对的请求/api/v1/myresource。在当前配置下,myapp-api服务仅处理请求myapp.westeurope.cloudapp.azure.com/api/api/v1/myresource(请注意... / api / api / ...)。
是否可以/api通过myapp-api服务将请求提供给服务,但将这些请求重写/为服务而无需创建另一个Ingress?因此,myapp-api应该将请求提供给myapp.westeurope.cloudapp.azure.com/api/v1/myresource。
我只需要更新实体的一两个属性。换句话说,我有一个带有 Id、ParentId、Name 和 Description 的实体。
问题是当名称更新时,如果描述已经存在于数据库中,它就会被清除。
这是代码:
internal void Update(ItemInfo itemInfo)
{
var item = new Item { Id = itemInfo.Id, ParentId = itemInfo.ParentId, Name = itemInfo.Name };
var entry = this.DbContext.Items.Attach(item);
if (item.ParentId != null) entry.Property(x => x.ParentId).IsModified = true;
if (!(String.IsNullOrWhiteSpace(item.Name))) entry.Property(x => x.Name).IsModified = true;
this.SaveChanges();;
}
Run Code Online (Sandbox Code Playgroud)
我认为由于我将特定属性设置为已修改,因此只会更新该属性。
或者我应该首先从数据库中获取实体,然后只设置属性并保存。我想避免一次保存两次访问数据库。